Java Stream - 将数据行收集到更少的行中,并将一列分组到集合中
Java Stream - Collecting rows of data into less rows with one column grouped into set
我刚开始使用 Java 流,所以对于任何误解,我深表歉意。
我希望在我的流中使用 Collect 来 return 一个流,该流具有匹配所有元素的分组行,但一个元素进入单个行,其中一个元素被添加到一个集合中。
例如,如果我的流包含数据:
[{12, "Apple", "Gala"},
{12, "Apple", "Fuji"},
{13, "Orange", "Navel"},
{13, "Orange", "Valencia"}]
收集第 3 列后,它将 return 流式传输数据:
[{12, "Apple", ["Gala", "Fuji"]},
{13, "Orange", ["Navel", "Valencia"]}]
这可以使用流收集方法吗?非常感谢任何帮助!
谢谢。
你需要做的是创造一个水果class。
一旦你这样做了,你就有了三个 getter
获取编号、获取类型、获取名称。
现在你有了一个水果列表。
一旦你有了它,你会做:
list.stream()
.collect(Collectors.groupingBy(Fruit::getNumber,
Collectors.groupingBy(Fruit::getName, Collectors.mapping(Fruit::getType, Collectors.toList())))));
这将 return 哈希图的哈希图,如下所示:
{12={Apple=[Gala]}, 13={Orange=[Navel, Valencia]}}
如果您希望水果对象成为键而不是名称,您可以将 Fruit::getName 替换为 Function.identity()。
这是此演示的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()))));
我刚开始使用 Java 流,所以对于任何误解,我深表歉意。
我希望在我的流中使用 Collect 来 return 一个流,该流具有匹配所有元素的分组行,但一个元素进入单个行,其中一个元素被添加到一个集合中。
例如,如果我的流包含数据:
[{12, "Apple", "Gala"},
{12, "Apple", "Fuji"},
{13, "Orange", "Navel"},
{13, "Orange", "Valencia"}]
收集第 3 列后,它将 return 流式传输数据:
[{12, "Apple", ["Gala", "Fuji"]},
{13, "Orange", ["Navel", "Valencia"]}]
这可以使用流收集方法吗?非常感谢任何帮助!
谢谢。
你需要做的是创造一个水果class。 一旦你这样做了,你就有了三个 getter
获取编号、获取类型、获取名称。
现在你有了一个水果列表。
一旦你有了它,你会做:
list.stream()
.collect(Collectors.groupingBy(Fruit::getNumber,
Collectors.groupingBy(Fruit::getName, Collectors.mapping(Fruit::getType, Collectors.toList())))));
这将 return 哈希图的哈希图,如下所示:
{12={Apple=[Gala]}, 13={Orange=[Navel, Valencia]}}
如果您希望水果对象成为键而不是名称,您可以将 Fruit::getName 替换为 Function.identity()。
这是此演示的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()))));