Java Streams:按不在列表中的值对列表进行分组会返回一个包含非退出值作为键和原始列表作为值的映射?



这可能是一个愚蠢的问题,但是,我试图理解为什么使用以下代码:

public static void main(String[] args) {
List<String> testData = Lists.newArrayList("a", "b", "c");
Map<String, List<String>> grouped = testData.stream().collect(Collectors.groupingBy(item -> "z"));
System.out.println(grouped);
}

将返回地图:

{z=[a, b, c]}

我在这里尝试按列表中没有的值对列表进行分段。因此,我希望得到以下回报:

{z=[]}

在我的例子中,分类器函数并不是那么简单,但简而言之,它可能会产生一个不在列表值中的分类器值。

我在这里错过了什么?

Collectors.groupingBy将根据函数返回的将所有项目分组到Map<Key,List<Item>>中。
您为所有项目返回相同的键"z",因此它们都组合在一起。

另一个答案解释了分组的工作原理。我不确定是否完全理解您的要求。但你可能想看看partitioningBy是否能帮助你。

List<String> testData = Arrays.asList("a", "b", "c", "z");
Map<Boolean, List<String>> grouped = testData.stream()
.collect(Collectors.partitioningBy(item -> item.equals("z")));
System.out.println(grouped);

将始终打印带有 2 个键的地图。

{false=[a, b, c], true=[z]}

相关内容

最新更新