目录
什么是Stream流
他可以被用来对集合和数组进行链式编程 可以更方便的让我们对集合或者数组进行操作
可以解决什么问题
对集合和数组更便捷的遍历 操作
如何使用
集合对象.Stream() 数组对象Arrays.stream(数组) 或者Stream.of(数组)
对于双列集合 转为单列再操作 例如map.entrySet().stream
中间操作
先创建一个user类
public class User { public User(String name, String age, int height) { this.name = name; this.age = age; this.height = height; } private String name; private String age; private int height; }
1.快速创建list集合
User zhangsan = new User("zhangsan", "24", 177); User lisi = new User("lisi", "30", 182); User wangwu = new User("wangwu", "42", 196); //Strem流快速创建list List<User> userList = Stream.of(zhangsan, lisi, wangwu).collect(Collectors.toList());
2.filter: 作用:对集合中的元素进行过滤 将符合条件的元素继续留在流中
//filter 过滤年龄小于30的user userList.stream() .filter(user -> Integer.valueOf(user.getAge()) < 30) .forEach(obj->System.out.println(obj.toString()));
3.map :作用 :可以用来遍历 类型转换
//map userList.stream() .map(User::getName) .forEach(obj->System.out.println(obj.toString()));
4.disinct 可以用来去除重复
//disinct 对年龄进行过滤 //再添加一个user User wangmazi = new User("wangmazi", "42", 196); userList.add(wangmazi); userList.stream() .map(user -> user.getAge()) .distinct() .forEach(obj->System.out.println(obj.toString()));
5.sorted 对流中的元素进行排序
//对身高进行排序 // User类实现了Comparable<User>接口 并重写方法 public class User implements Comparable<User> @Override public int compareTo(User o) { return o.getHeight()-this.getHeight(); } userList.stream() .distinct() .sorted() .forEach(obj->System.out.println(obj.toString()));
6.limit 对流的长度限制
//挑选出身高最高的两个人 userList.stream() .distinct() .sorted() .limit(2) .forEach(obj->System.out.println(obj.toString()));
7.skip 跳过流中的前几个元素 返回剩余的元素
//挑选出身高最低的人 userList.stream() .sorted() .skip(2) .forEach(obj->System.out.println(obj.toString()));
终结操作
1.forEach 对流中的元素遍历
// //输出所有人的名字 userList.stream() .map(user -> user.getName()) .forEach(name-> System.out.println(name));
2.count 获取当前流中的个数
//count没有参数 记得接收count之后的值 //输出一共有多少人 long count = userList.stream() .count(); System.out.println(count);
3.求和 mapToDouble
// int、double、long:类似 double max = userList.stream().mapToDouble(User::getHeight).sum(); System.out.println(max);
4.最值 max&min
// //输出身高最高 最低 Optional<Integer> max = userList.stream() .map(user -> user.getHeight()) .max((heigjt1, height2) -> heigjt1 - height2); System.out.println(max.get()); Optional<Integer> min = userList.stream() .map(user -> user.getHeight()) .min((heigjt1, height2) -> heigjt1 - height2); System.out.println(min.get());
5.collect 将流转换为集合
// //将名字转为一个集合、 List<String> collect = userList.stream() .map(user -> user.getName()) .collect(Collectors.toList()); collect.stream().forEach(obj-> System.out.println(obj));
6.anyMatch allMactch 见名知意 用来判断流中是否有符合条件的元素
// //判断集合是否有人名为ww boolean b = userList.stream() .anyMatch(user -> user.getName() == "ww"); System.out.println(b); // 判断集合中的user的身高是否都大于167 boolean c = userList.stream() .allMatch(user -> user.getHeight()>167); System.out.println(c);
7.findFirst 获取流中的第一个元素
// //判断流中身高最低的人的身高 Optional<Integer> first = userList.stream() .map(user -> user.getHeight()) .sorted() .findFirst(); first.ifPresent(obj-> System.out.println(obj));
8.findAny 获取流中的任意一个元素
// //判断流中是否有人身高196 Optional<User> any = userList.stream() .filter(user -> user.getHeight() == 196) .findAny(); any.ifPresent(obj-> System.out.println(obj.getName()));
Map、List互转
//list转haspMap Map<String, String> collect = userList.stream().collect(Collectors.toMap(User::getAge, User::getName)); //haspMap转list collect.entrySet().stream() .map(user->user.getKey()) .collect(Collectors.toList()) .forEach(o-> System.out.println(o));