java 8 update 131是什么_1.3 java8新特性总结

1 importjava.util.ArrayList;2 importjava.util.HashMap;3 importjava.util.List;4 importjava.util.Map;5 importjava.util.Optional;6 importjava.util.OptionalLong;7 importjava.util.stream.LongStream;8

9 /**

10 *@authorzhaojigang11 * @date 2018/5/1912 */

13 public classStreamTest {14

15 static List integerList = new ArrayList() {{16 add(1);17 add(2);18 add(3);19 add(4);20 add(5);21 add(5);22 add(5);23 }};24

25 static List integerList2 = new ArrayList() {{26 add(10);27 add(20);28 add(30);29 }};30

31 static Map> map1 = new HashMap<>();32

33 static{34 map1.put("list1", integerList);35 map1.put("list2", integerList2);36 }37

38 /**

39 * 分片与筛选40 */

41 public static voidtest1() {42 integerList.stream()43 .filter(x -> x > 2) //3,4,5,5,5

44 .skip(2) //5,5,5

45 .limit(2) //5,5 短路:一旦获取到2个元素后不再向后迭代

46 .distinct() //5

47 .forEach(System.out::println);48 }49

50 /**

51 * 映射52 * map(Function f):接收一个函数作为参数,该函数会被应用到每个元 素上,并将其映射成一个新的元素53 * flatMap(Function f):接收一个函数作为参数,将流中的每个值都换成另一个流,然后把所有流连接成一个流54 */

55 public static voidtest2() {56 integerList.stream()57 .map(x -> x + 10)58 .forEach(System.out::println);59

60 map1.values().stream()61 .flatMap(x -> x.stream()) //x是每一个List,flatMap将每一个List的Stream合并起来

62 .forEach(System.out::println);63

64 }65

66 /**

67 * 排序68 * sorted():产生一个新流,其中按自然顺序排序(按照元素的Comparable接口)69 * sorted(Comparator comp):产生一个新流,其中按比较器顺序排序(按照自定义的Comparator)70 */

71 public static voidtest3() {72 integerList.stream()73 .sorted()74 .forEach(System.out::println);75

76 integerList.stream()77 .sorted((x, y) ->{78 if (x

86 }87

88 /**

89 * 查找与匹配90 * allMatch(Predicate p):检查是否匹配所有元素91 * anyMatch(Predicate p):检查是否至少匹配一个元素92 * noneMatch(Predicate p):检查是否没有匹配所有元素93 * findFirst():返回第一个元素94 * findAny():返回当前流中的任意元素95 * count():返回流中元素总数96 * max(Comparator c):返回流中最大值97 * min(Comparator c):返回流中最小值98 */

99 public static voidtest4() {100 final boolean allMatch = integerList.stream().allMatch(x -> x > 4);101 final boolean anyMatch = integerList.stream().anyMatch(x -> x > 4);102 final boolean noneMatch = integerList.stream().noneMatch(x -> x > 4);103 final Optional first = integerList.stream().filter(x -> x > 3).findFirst();104 final Optional any = integerList.stream().filter(x -> x > 3).findAny();105 final long count = integerList.stream().filter(x -> x > 4).count();106 final Optional max =integerList.stream()107 .max((x, y) ->{108 if (x

115 }116

117 /**

118 * 规约119 *

120 * reduce(T iden, BinaryOperator b):可以将流中元素反复结合起来,得到一个值。返回T,其中iden是初始值121 * reduce(BinaryOperator b):可以将流中元素反复结合起来,得到一个值。返回Optional122 */

123 public static voidtest5() {124 //计算:100+1+2+3+4+5+5+5

125 final Integer sum = integerList.stream().reduce(100, (x, y) -> x +y);126 final Optional sumOptional = integerList.stream().reduce((x, y) -> x +y);127 }128

129 /**

130 * 收集131 * 常用:132 * 1、将流元素收集到List:List emps= list.stream().collect(Collectors.toList());133 * 2、将流元素收集到Set:List emps= list.stream().collect(Collectors.toSet());134 * 3、连接流中每个字符串:String str= list.stream().map(Employee::getName).collect(Collectors.joining());135 * 4、分组: Map> map= list.stream().collect(Collectors.groupingBy(Employee::getStatus));136 *137 * 不常用:138 * 1、根据true或false进行分区:Map>vd= list.stream().collect(Collectors.partitioningBy(Employee::getManage));139 * 2、根据比较器选择最大值:Optionalmax= list.stream().collect(Collectors.maxBy(comparingInt(Employee::getSalary)));140 * 3、根据比较器选择最小值:Optional min = list.stream().collect(Collectors.minBy(comparingInt(Employee::getSalary)));141 * 4、将流元素收集到任意指定集合:Collection emps=list.stream().collect(Collectors.toCollection(ArrayList::new));142 * 5、计算流中元素的个数:long count = list.stream().collect(Collectors.counting());143 * 6、对流中元素的属性求和:int total=list.stream().collect(Collectors.summingInt(Employee::getSalary));144 * 7、计算流中元素Integer属性的平均值:double avg= list.stream().collect(Collectors.averagingInt(Employee::getSalary));145 */

146 public static voidtest6() {147 }148

149 /**

150 * 并行流与串行流151 * 并行流就是把一个内容分成多个数据块,并用不同的线程分别处理每个数据块的流。152 * 底层:fork/join153 * Stream API可以声明性地通过parallel()与sequential()在并行流与顺序流之间进行切换154 */

155 public static voidtest7(){156 long start =System.currentTimeMillis();157

158 final OptionalLong sum = LongStream.rangeClosed(0, 100000000000L)159 .parallel()160 .reduce(Long::sum);161

162 System.out.println(sum + "-" + (System.currentTimeMillis() -start));163 }164

165 public static voidmain(String[] args) {166 test7();167 }168 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值