java8 新特性
对java8 新特性的整理
1.lambdab表达式
例如:
//lambda一般只有一行代码
// 相当于ArrayList集合 List<Integer> integers = Arrays.asList(1, 1, 4,5,6,7,8);
//进行遍历 Arrays.asList(1, 1, 4,5,6,7,8).forEach(a -> System.out.println(a));
//引用类的局部变流量,隐式转化为final,这样效率会更高,这个变量str将不能被改变 String str = ","; //等价于:final String str = ","; Arrays.asList( "a", "b", "c" ).forEach( e -> System.out.print( e + str ) ); //进行排序 List<Integer> list = Arrays.asList(4, 2, 1, 3); list.sort((a1,b1) -> a1.compareTo(b1)); list.forEach(a -> System.out.println(a));
List<MyTest2> list = Arrays.asList( new MyTest2(5, "a"), new MyTest2(12, "b"), new MyTest2(11, "b"), new MyTest2(8, "c") );
// 计算满足条件的年龄和和 int b = list.stream().filter(x -> x.getName().equals("b")).mapToInt(MyTest2::getAge).sum();
// parallel 支持并行处理
int b = list.stream().filter(x -> x.getName().equals("b")).parallel().mapToInt(MyTest2::getAge).sum();
// 另外一种写法 reduce 是提炼 新的值和原来的值进行叠加
Integer b = list.stream().filter(x -> x.getName().equals("b")).parallel().map(MyTest2::getAge).reduce(0, Integer::sum);
// 进行分组
Map<String, List<MyTest2>> collect = list.stream().collect(Collectors.groupingBy(MyTest2::getName));
结果:{a=[MyTest2(age=5, name=a)], b=[MyTest2(age=12, name=b), MyTest2(age=11, name=b)], c=[MyTest2(age=8, name=c)]}
// 字符串拼接
String reduce = list.stream().mapToInt(MyTest2::getAge).mapToObj(x -> x + ",").reduce("", String::concat);
结果:
5,12,11,8,
System.out.println(b);
optional 新增的类库
可以解决java空指针异常的情况.
List<MyTest2> list = Arrays.asList(
new MyTest2(5, "a"),
new MyTest2(12, "b"),
new MyTest2(11, "b"),
new MyTest2(8, "c")
);
int b = list.stream().filter(x -> x.getName().equals("b")).mapToInt(MyTest2::getAge).sum();
System.out.println(b);