Java 8 Streams - 如何使用 Integer 键获得等效的 partitioningBy()?
Java 8 Streams - How to get an equivalent of partitioningBy() with Integer keys?
在下面显示的代码中,p
是类型为 Predicate<String>
的谓词。
Map<Boolean, List<String>> partitioned = numbers.stream()
.collect(Collectors.partitioningBy(p));
是否可以在分区逻辑中将 boolean
键转换为 int
类型,而不是使用另一个流?
看起来可以用 grouping
来完成。
Map<String, List<String>> targetTableColumnListMap = nqColumnMapList.stream()
.flatMap(m -> m.entrySet().stream())
.collect(Collectors.groupingBy(
e -> e.getKey().toUpperCase(),
Collectors.mapping(Map.Entry::getValue, Collectors.toList())
));
您可以使用终端操作 collect(Collectors.toMap())
按谓词分组,而不是 return 将其 boolean
值作为键,您可以使用三元运算符 return 1 或 0。
to convert the boolean keys to the int type
然后,您可以将 List
映射到您测试 Predicate
所用的 String
上构建的 List
,并处理冲突情况,您可以添加 List
将第二个键关联到第一个键对应的List
中。
这是代码片段:
//My silly test Predicate
Predicate<String> p = s -> s.length() > 4;
//Mapping the numbers list
Map<Integer, List<String>> partitioned = numbers.stream()
.collect(Collectors.toMap(s -> p.test(s) ? 1 : 0,
s -> new ArrayList<>(List.of(s)),
(list1, list2) -> {
list1.addAll(list2);
return list1;
}
));
这里还有一个link测试代码:
Is it possible to convert the boolean keys to the int
type inside the
partitioning logic
因此您需要将列表中的值与 0
和 1
相关联(例如,为了将数据存储到数据库中 ) 基于给定的 predicate.
为此,您可以将收集器 groupingBy()
与 predicate.
结合使用,而不是 partitioningBy()
Map<Integer, List<String>> partitioned = numbers.stream()
.collect(Collectors.groupingBy(num -> predicate.test(num) ? 1 : 0));
在下面显示的代码中,p
是类型为 Predicate<String>
的谓词。
Map<Boolean, List<String>> partitioned = numbers.stream()
.collect(Collectors.partitioningBy(p));
是否可以在分区逻辑中将 boolean
键转换为 int
类型,而不是使用另一个流?
看起来可以用 grouping
来完成。
Map<String, List<String>> targetTableColumnListMap = nqColumnMapList.stream()
.flatMap(m -> m.entrySet().stream())
.collect(Collectors.groupingBy(
e -> e.getKey().toUpperCase(),
Collectors.mapping(Map.Entry::getValue, Collectors.toList())
));
您可以使用终端操作 collect(Collectors.toMap())
按谓词分组,而不是 return 将其 boolean
值作为键,您可以使用三元运算符 return 1 或 0。
to convert the boolean keys to the int type
然后,您可以将 List
映射到您测试 Predicate
所用的 String
上构建的 List
,并处理冲突情况,您可以添加 List
将第二个键关联到第一个键对应的List
中。
这是代码片段:
//My silly test Predicate
Predicate<String> p = s -> s.length() > 4;
//Mapping the numbers list
Map<Integer, List<String>> partitioned = numbers.stream()
.collect(Collectors.toMap(s -> p.test(s) ? 1 : 0,
s -> new ArrayList<>(List.of(s)),
(list1, list2) -> {
list1.addAll(list2);
return list1;
}
));
这里还有一个link测试代码:
Is it possible to convert the boolean keys to the
int
type inside the partitioning logic
因此您需要将列表中的值与 0
和 1
相关联(例如,为了将数据存储到数据库中 ) 基于给定的 predicate.
为此,您可以将收集器 groupingBy()
与 predicate.
partitioningBy()
Map<Integer, List<String>> partitioned = numbers.stream()
.collect(Collectors.groupingBy(num -> predicate.test(num) ? 1 : 0));