一個集合使用Java 8 Stream管線操作時,若要依集合元素的某些條件分成兩組,可使用Collectors.partitioningBy()
。
例如一個List
中有整數1-9,將大於5的分成一堆,不大於5的分成一堆。
使用Collectors.partitioningBy()
分好的集合會放在Map<Boolean, List<T>>
中,符合條件的集合的key為true,反之為false。
List<Integer> intList = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9);
Map<Boolean, List<Integer>> partitionedMap =
intList.stream().collect(Collectors.partitioningBy(i -> i > 5));
List<Integer> gt5IntList = partitionedMap.get(true); // [6, 7, 8, 9]
System.out.println(gt5IntList);
List<Integer> le5IntList = partitionedMap.get(false); // [1, 2, 3, 4, 5]
System.out.println(le5IntList);
下面使用傳統的寫法依上述條件分成兩堆。
List<Integer> intList = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9);
List<Integer> gt5IntList = new ArrayList<>();
List<Integer> le5IntList = new ArrayList<>();
for (int i : intList) {
if (i > 5) {
gt5IntList.add(i);
} else {
le5IntList.add(i);
}
}
System.out.println(gt5IntList); // [6, 7, 8, 9]
System.out.println(le5IntList); // [1, 2, 3, 4, 5]
沒有留言:
張貼留言