流分组的值

时间:2016-02-09 11:10:19

标签: java java-stream streamex

是否存在C:/xampp/htdocs/tesProject/push_servers.ini 的非终端版本或其他一些整齐的方式来流式传输生成的Map条目/值?

我发现自己希望在groupingBy之后流过值,但我能想到的最好的不是很好:

groupingBy

2 个答案:

答案 0 :(得分:2)

在单个Stream管道中执行此操作可能需要将所需操作视为完全屏障:为了对值进行分组,我们需要处理它们以查看哪些值是偶数和奇数(并且能够求和它们)。

因此,最好使用临时数据结构来保存偶数和奇数值的计数,在这种情况下,它将是Map<Integer, Integer>或甚至是Map<Boolean, Integer>(其中,对于例如,对于偶数值,键为true,对于奇数值,键为false,使用Collectors.partitioningBy)。

请注意,您无需在此处使用StreamEx库。您可以直接在Stream API中执行此操作:

public static void main(String[] args) {
    Map<Integer, Integer> map =
      Stream.of(0, 1, 2, 4)
            .collect(Collectors.groupingBy(
               i -> i % 2,
               Collectors.summingInt(i -> i)
            ));

    Stream<Integer> stream = map.values().stream();
}

答案 1 :(得分:1)

summingInt可能是此特定问题的最佳解决方案。

我想我在我的例子中使用了int来过度简化问题。我的实际问题是合并对象,而不是int值。我发现collectingAndThen非常有用。它的工作原理如下:

Function<List<Integer>, Integer> merge = ii -> ii.stream().mapToInt(i -> i).sum();
Stream.of(0, 1, 2, 4).collect(groupingBy(i -> i % 2, collectingAndThen(toList(), merge))).values();