/** *********************************规约********************************/ /** * 规约 * * reduce(T identity ,BinaryOperator) / reduce - 可以将流中元素冉福结合起来,得到一个值 */ @Test public void test11() { List<Integer> llist = Arrays.asList( 1,2,3,4,5,6,7,8 ); //这种不可能为空 Integer sun = llist.stream() //首先把0作为x 然后0+1得到1 然后把1作为x 然后1+2 逐渐结合 .reduce( 0,(x,y) -> x+y ); System.out.println(sun); //这种可能为空,因为没有起始值 Optional<Integer> ss = list.stream() .map((x) -> x.getId() ) .reduce((x,y) -> x+y); System.out.println(ss.get()); } /** *********************************收集********************************/ /** * 收集 * collect - 将流转化为其他形式,接受一个Collector接口的实现,用于给Stream中元素做汇总的方法 */ @Test public void test12() { /** * Collector接口中方法的实现决定了如何对流执行收集操作,(如收集到List,Set,Map) * 但是Collectors实用类提供了很多静态方法,可以方便的创建常见收集器实例 */ List l = list.stream() .map( (x) -> x.getName() ) /**将得到的name放在list*/ .collect( Collectors.toList() ); l.forEach( System.out::println ); list.stream() .map( (x) -> x.getName() ) /**将得到的name放在set*/ .collect( Collectors.toSet() ); list.stream() .map( (x) -> x.getName() ) /**将得到的name放在HashSet*/ .collect( Collectors.toCollection( HashSet::new ) ); Long l1 = list.stream() /***得到集合的总数*/ .collect( Collectors.counting() ); System.out.println(l1); Double d = list.stream() /**id的平均值*/ .collect( Collectors.averagingDouble( Use::getId) ); Double d1 = list.stream() /**id的总和*/ .collect( Collectors.summingDouble( Use::getId ) ); Optional optional = list.stream() /**id的最大值*/ .collect( Collectors.maxBy((x,y) -> Double.compare( x.getId(),y.getId() ) ) ); System.out.println( optional.get() ); /**id的最小值*/ Optional<Integer> oo = list.stream( ) .map( Use::getSaler ).min( Double::compare ); System.out.println(oo.get()); /** * 分组 * * 按照id分组 */ Map <Integer, List <Use>> m = list.stream() .collect( Collectors.groupingBy( Use::getId ) ); //遍历map for (Map.Entry map:m.entrySet()) { System.out.println(map.getKey()); System.out.println(map.getValue()); } System.out.println(m); /** * 组合分组 * 满足条件一个区(true),不满足条件一个区(false) */ Map<String, Map<Integer, List<Use>>> mapMap = list.stream() .collect( Collectors.groupingBy( Use::getName,Collectors.groupingBy( (e) -> e.getId() ) ) ); /** * 分区 */ Map<Boolean, List<Use>> map = list.stream() .collect( Collectors.partitioningBy( (e) -> e.getId()>3 ) ); System.out.println(map); DoubleSummaryStatistics dd = list.stream() .collect( Collectors.summarizingDouble( (x) -> x.getId() ) ); /** * 连接字符串 */ list.stream() .map( (x) -> x.getName() ) .collect( Collectors.joining("z") ); }
java8新特性之 Stream Api 之 规约 和收集(四)
猜你喜欢
转载自blog.csdn.net/weixin_41404773/article/details/80927202
今日推荐
周排行