List集合的排序,取最值,根据某个元素取值,统计,求和
直接上代码
import lombok.extern.slf4j.Slf4j;
import java.util.*;
import java.util.stream.Collectors;
@Slf4j
public class Test {
public static void main(String[] args) {
User user1 = new User();
user1.setName("菜鸟");
user1.setAge(12);
User user2 = new User();
user2.setName("新手");
user2.setAge(17);
User user3 = new User();
user3.setName("萌新");
user3.setAge(14);
List<User> userList = new ArrayList<User>();
userList.add(user1);
userList.add(user2);
userList.add(user3);
System.out.println("初始无排序:");
userList.forEach(u -> System.out.println(u.getAge()));
//按照user的 age进行排序
userList.sort(Comparator.comparing(User::getAge)); // 正序
System.out.println("正序==========================");
userList.forEach(u -> System.out.println(u.getAge()));
userList.sort(Comparator.comparing(User::getAge).reversed()); // 倒序
System.out.println("倒序==========================");
userList.forEach(u -> System.out.println(u.getAge()));
System.out.println("==========================");
//获取年龄最大的User
User maxAge = userList.stream().max(Comparator.comparing(User::getAge)).get();
System.out.println("最大年龄:"+maxAge.getAge());
//获取年龄最小的User
User minAge = userList.stream().min(Comparator.comparing(User::getAge)).get();
System.out.println("最小年龄:"+minAge.getAge());
//过滤出年龄是17的
List<User> userList1 = userList.stream().filter(user-> user.getAge() == 17).collect(Collectors.toList());
System.out.println("过滤出年龄是17的:"+userList1.toString());
//统计年龄等于17的个数
long count = userList.stream().filter(user-> user.getAge() == 17).count();
System.out.println("统计年龄等于17的个数:"+count);
//获得年龄的平均值
double db = userList.stream().mapToInt(user-> user.getAge()).average().getAsDouble();
System.out.println("获得年龄的平均值:"+db);
//年龄和
int sum = userList.stream().mapToInt(user-> user.getAge()).sum();
System.out.println("年龄和:"+sum);
}
static class User{
public String name;
public Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
}
运行结果: