最近整好遇到了這個問題,然后搜索顯示都是大家都是借鑒國外某博主的寫法
優(yōu)化前:
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");
}
});
}
優(yōu)化后:
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接口簡單實現(xiàn)了我們的業(yè)務,感覺代碼風格跟我們之前寫的好像有點不太一樣.之前我們都是先進行boolean 判斷 然后再去執(zhí)行相應的業(yè)務邏輯.但是上邊的代碼很明顯就是先寫出我們的業(yè)務邏輯,最后才開始進行boolean判斷從而指定讓程序去執(zhí)行對應的業(yè)務邏輯.