List<Integer> integers = List.of(124, 2, 15, 12, 51, -5, 5);
// 按照自然排序
integers.stream().sorted().forEach(System.out::println);
System.out.println("---------");
List<Integer> integers2 = List.of(124, 2, 15, 12, 51, -5, 5);
// 定制排序(大到小),需要传入Comparator接口(如果流中的是引用类型,只能用定制排序)
// 简写:integers2.stream().sorted((e1,e2) -> e2-e1).forEach(System.out::println);
integers2.stream().sorted((e1,e2) -> {
return e2-e1;
}).forEach(System.out::println);
// 创建三个user
User user1 = new User("111", "18", 180);
User user2 = new User("222", "18", 175);
User user3 = new User("333", "19", 170);
List<User> userList = new ArrayList<>();
userList.add(user1);
userList.add(user2);
userList.add(user3);
// stream流,创建的是动态数组,可以添加元素
List<User> userList = Stream.of(user1, user2, user3).collect(Collectors.toList());
// 本质是将一个数组转成list,数组的大小是固定的,所以此list不能添加元素
// 如果调用add方法增加新的元素,会报异常:java.lang.UnsupportedOperationException
List<String> s = Arrays.asList("1","2","3")
List<String> userNameList = userList.stream().map(User::getName).collect(Collectors.toList());
List<User> newUserList = new ArrayList<>();
// if判断
for (User user : userList) {
if(user.getName() != null) {
newUserList.add(user);
}
}
// 获取userName不为空的user的List
List<User> userList = userList.stream().filter(user-> user.getName() != null).collect(Collectors.toList());
Map<String, List<User>> map = new HashMap<>();
// if判断
for (User user : userList) {
if (map.get(user.getAge()) == null) {
map.put(user.getAge(), new ArrayList());
}
map.get(user.getAge()).add(user);
}
//Stream流:groupingBy
Map<String, List<User>> map =userList.stream().collect( Collectors.groupingBy(User::getAge, Collectors.toList()));
// int、double、long:
double max = userList.stream().mapToDouble(User::getHeight).sum();
Map<String, User> userMap = new Map<>();
for (User user : userList) {
userMap.put(user.getName(), user);
}
用Collectors的toMap方法转换List,一般会遇到两个问题。
(1)转换map,key重复问题;
代码中使用(key1,key2)->key2表达式可以解决此类问题,如果出现重复的key就使用key2覆盖前面的key1,也可以定义成(key1,key2)->key1,保留key1,根据自己的业务场景来调整。
(2)空指针异常,即转为map的value是null。这个可以用filter过滤;
Map<String, User> userMap= userList.stream().collect(Collectors.toMap(User::getName, Function.identity(),(key1, key2)->key2));
List<User> userList = userMap.entrySet().stream().map(e ->e.getValue()).collect(Collectors.toList());
userList.stream().anyMatch(user -> user.getHeight() > 175);
userList.stream().allMatch(user -> user.getHeight() > 175);
userList.stream().noneMatch(user -> user.getHeight() > 175);
userList.stream().filter(user -> user.getHeight() > 175).count();