不废话直接上代码,亲测有效。
import java.util.*;
import java.util.stream.Collectors;
import static java.util.stream.Collectors.*;
public class listTest {
public static void main(String[] args) {
List<User> list=new ArrayList<>();
list.add(new User(21l,"张三"));
list.add(new User(25L, "李四"));
list.add(new User(22L, "王五"));
list.add(new User(19L, "赵柳"));
list.add(new User(32L, "王5"));
list.add(new User(29L, "王6"));
list.add(new User(21L, "王7"));
//对象根据年龄属性升序排列
List<User> ageList=list.stream().sorted(Comparator.comparing(User::getAge)).collect(toList());
//对象根据年龄属性降序排列
List<User> agejList=list.stream().sorted(Comparator.comparing(User::getAge).reversed()).collect(toList());
//list遍历
ageList.forEach(System.out::println);
System.out.println("========================");
agejList.forEach(System.out::println);
//平均数
double asDouble=list.stream().mapToDouble(User::getAge).average().getAsDouble();
System.out.println("average:"+asDouble);
double avg=list.stream().collect(Collectors.averagingLong(User::getAge));
System.out.println("avg:"+avg);
//最大值
long asLong=list.stream().mapToLong(User::getAge).max().getAsLong();
System.out.println("max:"+asLong);
//最小值
long asLong1=list.stream().mapToLong(User::getAge).min().getAsLong();
System.out.println("min:"+asLong1);
//求和
long sum=list.stream().mapToLong(User::getAge).sum();
System.out.println("sum:"+sum);
//提取对象属性生成list
List<Long> agesList=list.stream().map(User::getAge).collect(toList());
System.out.println("agesList:"+agesList);
//list升序
Collections.sort(agesList);
System.out.println(agesList);
//生成中位数
Long j;
if(agesList.size()%2==0){
j=(agesList.get(agesList.size()/2-1)+agesList.get(agesList.size()/2))/2;
System.out.println("中位数为:"+j);
}else {
j=agesList.get(agesList.size()/2);
System.out.println("中位数为:"+j);
}
//list倒序排列
agesList.sort(Comparator.reverseOrder());
System.out.println("倒序:"+agesList);
//list去重
List<User> userList=list.stream().collect(collectingAndThen(toCollection(()-> new TreeSet<>(Comparator.comparingLong(User::getAge))),ArrayList::new));
System.out.println("去重:"+userList);
/**
* list->Map
* 需要注意的是:toMap 如果集合对象有重复的key,会报错Duplicate key ....
* apple1,apple12的id都为1。可以用 (k1,k2)->k1 来设置,如果有重复的key,则保留key1,舍弃key2
*/
Map<Long,User> userMap=list.stream().collect(Collectors.toMap(User::getAge,a->a,(k1,k2)->k1));
System.out.println("userMap:"+userMap);
//过滤出符合条件的数据
List<User> filterList=list.stream().filter(a->a.getName().equals("李四")).collect(toList());
System.out.println("filterList"+filterList);
List<Integer> list2=Arrays.asList(1,2,3,4,5);
int sum2=list2.stream().reduce(0,(acc,value)->acc+value);
System.out.println("sum2="+sum2);
List<Integer> result=list2.stream().filter((value)-> value>2).collect(toList());
result.forEach(System.out::println);
List<String> result2=list2.stream().map(value->String.format("String:%s",value)).collect(toList());
result2.forEach(System.out::println);
//用于收集统计数据的状态对象,例如count,min,max,sum。
IntSummaryStatistics stats=list2.stream().mapToInt((x)->x).summaryStatistics();
System.out.println("Max : " + stats.getMax());
System.out.println("Min: " + stats.getMin());
System.out.println("Sun: " + stats.getSum());
System.out.println("Average : " + stats.getAverage());
System.out.println("Count : " + stats.getCount());
System.out.println("toString : " + stats.toString());
}
}
/**
* 测试类
*/
class User {
private Long age;
private String name;
public User(Long i,String s){
this.age=i;
this.name=s;
}
public Long getAge() {
return age;
}
public void setAge(Long age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "User{" +
"age=" + age +
", name='" + name + '\'' +
'}';
}
}