我刚开始使用Java流,所以我为任何误解而道歉。
我希望在我的流上使用Collect来返回一个流,该流具有与所有元素匹配的分组行,但只有一行成为单个行,其中一个元素被添加到集合中。
例如,如果我的流包含数据:
[{12, "Apple", "Gala"},
{12, "Apple", "Fuji"},
{13, "Orange", "Navel"},
{13, "Orange", "Valencia"}]
收集第3列后,它将返回带有数据的流:
[{12, "Apple", ["Gala", "Fuji"]},
{13, "Orange", ["Navel", "Valencia"]}]
这可以使用流收集方法吗?非常感谢任何和所有的帮助!
谢谢。
答案 0 :(得分:2)
您需要做的是创建一个水果类。 一旦你完成了这个,你有三个吸气剂
getNumber,getType,getName。
所以现在你有一个名为list的水果列表。
一旦你有了,你会这样做:
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对象是键而不是名称,可以将Fruit :: getName替换为Function.identity()。
答案 1 :(得分:1)
以下是此演示的rextester
Map<Integer, Map<String, Set<String>>> fruitsByIdByType =
fruits.stream()
.collect(Collectors.groupingBy(Fruit::getId, Collectors.groupingBy(Fruit::getName, Collectors.mapping(Fruit::getType, Collectors.toSet()))));