这可能是一个愚蠢的问题,但是,我试图理解为什么使用以下代码:
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]}