1.获取流的方法:
// 1.从集合转化 List<Integer> list = new ArrayList<>(); Stream<Integer> stream = list.stream();// 转化为流 stream.Collect(Collectors.toList());//转换为流,流再转回为集合。 // 2.自定义初始化 Stream<Integer> stream = Stream.of(1,5,6,4,8,3,1,9);
2.流处理算子的使用
2.1 排序
// 1.排序sorted() sorted( (x,y)->pattern ):当pattern表达式为正数时,将x放在y后面。 例: // 当x>y时,pattern为正数,x放在y后面,所以 升序。 list.stream().sorted( (x,y) -> x-y ).Collect(Collectors.toList()); // 当x<y时,pattern为正数,x放在y后面,所以 降序。 list.stream().sorted( (x,y) -> y-x ).Collect(Collectors.toList());
2.2 过滤去重
filter( x->pattern ) // 当x使得pattern表达式的值为true时,数据x会保留下来。 例: // 去重并保留偶数 list.stream().distinct().filter(e -> e % 2 == 0).collect(Collectors.toList());
2.3 groupingBy()分组,并对分组后的数据处理
/** 算子处理过程的逻辑:对于类型为T的数据流,按照定义的分组逻辑,获取对应的键值对集合Map。Map集合的key类型为分组键值的类型,Map集合的value为数据流原始类型T的集合List<T>。之后经过 value() 方法处理Map,得到Map中的所有value组成的集合List< List<T> >。之后经过map()以及自定义函数getSum,对List< List<T> >内部的List集合进行求和处理,得到 List< int >,并通过foreach输出。 */ 使用示例: 需求:将list数组中的元素按照奇偶分别求和。 // 定义分组逻辑 public static Function<Integer, String> GROUP_KEY = e -> e%2==0? "偶数":"奇数"; // 需求第一种实现:输出结果需要用到分组的键值key Map<String, List<Integer>> keyedList = list.stream().collect(Collector.groupingBy(GROUP_KEY)); keyedList.foreach( (k,v) -> { int sum = v.stream().maptoInt(Integer:intValue).sum(); System.out.println(k + ": " + sum); } ) // 需求第二种实现:只需要分组的value,不需要分组的键值key list.stream().collect(Collector.groupingBy(GROUP_KEY)).value().stream().map(MainClass::geetSum).map(e->e+", ").foreach(System.out:print); // 第二种实现,需要自定义map处理集合的逻辑 public static int getSum(List<Integer>) { // ... 对集合元素的求和逻辑 ... }
2.4 聚合reduce
// 获取数据流的聚合结果 int sum = list.stream().reduce((a,b) -> a+b).get();
2.5 匹配
// 全部匹配:流中的每个数据都要符合规则 boolean allMatch = list.stream().allMatch(i -> Pattern); // 任意匹配:流中 有一个 符合规则的数据即可 boolean anyMatch = list.stream().anyMatch(i -> Pattern); // 完全不匹配:流中的所有数据都不符合规则 boolean noneMatch = list.stream().noneMatch(i -> Pattern);
2.6 结束流(转为 集合、数组、截取前几个元素等)
// 对每个元素调用方法并结束流。 list.stream().foreach( function ); // 转换为 Object列表,Object[]。 list.stream().toArray(); // 截取流的 前5个 元素,并转化为集合输出 list.stream().limit( x ).collect(Collectors.toList());
标签:Map,java,stream,list,编程,List,流式,分组,集合 From: https://www.cnblogs.com/zhangzhenw/p/18050133