Java Stream – 将一行数据收集到较少的行中,其中一列分组为set

我刚开始使用 Java流,所以我为任何误解而道歉.

我希望在我的流上使用Collect返回一个流,该流具有与所有元素匹配的分组行,但是一个到单个行,其中一个元素被添加到集合中.

例如,如果我的流包含数据:

[{12, "Apple", "Gala"},
 {12, "Apple", "Fuji"},
 {13, "Orange", "Navel"},
 {13, "Orange", "Valencia"}] 

收集第3列后,它将返回带有数据的流:

[{12, "Apple", ["Gala", "Fuji"]},
 {13, "Orange", ["Navel", "Valencia"]}]

这是否可以使用流收集方法?非常感谢任何和所有的帮助!

谢谢.

最佳答案 你需要做的是创建一个水果类.

一旦你完成了,你有三个吸气剂

getNumber,getType,getName.

所以现在你有一个名为List的Fruit列表.

一旦你有了,你会做:

list.stream()
    .collect(Collectors.groupingBy(Fruit::getNumber,
        Collectors.groupingBy(Fruit::getName, Collectors.mapping(Fruit::getType, Collectors.toList())))));

这将返回一个哈希映射的哈希映射,如下所示:

{12={Apple=[Gala]}, 13={Orange=[Navel, Valencia]}}

如果希望fruit对象是键而不是名称,可以用Function.identity()替换Fruit :: getName.

点赞