gpt4 book ai didi

java - Java8-Streams 中的 GroupingBy

转载 作者:行者123 更新时间:2023-11-30 06:22:18 24 4
gpt4 key购买 nike

我在流中使用分组依据:

1:我想知道如何在 Collect 方法中使用“Grouping-By”两次。

2:其次,分组中定义返回类型的策略是什么?

1:

Map<String,String> sum1 = Items.items().stream()
.collect(Collectors.groupingBy(Items::getName,
Collectors.groupingBy(Items::getName)));

错误信息:

1:Exception in thread "main" java.lang.RuntimeException: Uncompilable source code - incompatible types: inference variable D has incompatible equality constraints java.lang.String,java.lang.Integer at collectorsinjava.CollectorsInJava.main(CollectorsInJava.java:33)

2:

     Map<String, Map<String,Integer>> sum1 = Items.items().stream()
.collect(Collectors.groupingBy(Items::getName,
Collectors.groupingBy(Items::getQuantity)));

错误信息:

2:Exception in thread "main" java.lang.RuntimeException: Uncompilable source code - incompatible types: inference variable K has incompatible bounds equality constraints: java.lang.String lower bounds: java.lang.Integer at collectorsinjava.CollectorsInJava.main(CollectorsInJava.java:37)

这是我的项目列表:

List<Items> item = Arrays.asList(new Items("A",22,new BigDecimal("23.3")),
new Items("B",33,new BigDecimal("19.99")),

new Items("C",31,new BigDecimal("23.3")),

new Items("D",22,new BigDecimal("19.99")),

new Items("B",33,new BigDecimal("23.3")),

new Items("C",31,new BigDecimal("19.99")),

new Items("D",22,new BigDecimal("23.3"))
);

有人可以建议我如何避免编译错误吗?

最佳答案

您可以通过链接groupingBy收集器来分组两次或任意多次,就像您所做的那样,但这里的问题是接收器类型不正确。

第一个查询的接收者类型应该是:

Map<String, List<Items>> resultSet = Items.items().stream()
.collect(Collectors.groupingBy(Items::getName));

因为不需要按同一属性进行两次分组。

当您将两个或多个分组收集器链接在一起时,您将收到一个多级映射,因此第二个查询的接收器类型应该是:

Map<String, Map<Integer, List<Items>>> anotherResultSet

否则,如果您想要调整收集器来执行额外的整理转换,那么您需要的是 collectingAndThen .

关于java - Java8-Streams 中的 GroupingBy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47867566/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com