最近整好遇到了这个问题,然后搜索显示都是大家都是借鉴国外某博主的写法
优化前:
public void inForEach() {
List<Integer> ints = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
ints.stream().forEach(i -> {
if (i.intValue() % 2 == 0) {
System.out.println("i is even");
} else {
System.out.println("i is old");
}
});
}
优化后:
List<Integer>ints=Arrays.asList(1,2,3,4,5,6,7,8,9,10);
Stream<Integer> evenIntegers=ints.stream().filter(i->i.intValue()%2==0);
Stream<Integer>oddIntegers=ints.stream().filter(i->i.intValue()%2!=0);
evenIntegers.forEach(i->System.out.println("i is even"));
oddIntegers.forEach(i->System.out.println("i is old"));
,然后我就在想会不会有别的写法特此记录一下.
public void inForEach() {
Map<Boolean, Consumer<Integer>> map = new HashMap<>();
Consumer<Integer> consumer = c -> System.out.println("i is even");
Consumer<Integer> consumer1 = c -> System.out.println("i is old");
List<Integer> ints = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
ints.forEach(i -> {
map.put(true, consumer);
map.put(false, consumer1);
map.get(i % 2 == 0).accept(i);
});
}
以上代码就是通过java8的Consumer接口简单实现了我们的业务,感觉代码风格跟我们之前写的好像有点不太一样.之前我们都是先进行boolean 判断 然后再去执行相应的业务逻辑.但是上边的代码很明显就是先写出我们的业务逻辑,最后才开始进行boolean判断从而指定让程序去执行对应的业务逻辑.