相关疑难解决方法(0)

Collectors.summingInt()vs mapToInt().sum()

如果要对流中的整数值求和,有两种主要方法:

ToIntFunction<...> mapFunc = ...
int sum = stream().collect(Collectors.summingInt(mapFunc))

int sum = stream().mapToInt(mapFunc).sum()
Run Code Online (Sandbox Code Playgroud)

第一个涉及装箱返回的整数并将其拆箱,但第二个步骤涉及额外的步骤.

哪个更有效/更清晰?

java sum java-8 java-stream

20
推荐指数
1
解决办法
3068
查看次数

为什么Stream操作与收集器重复?

请允许我提出一些投诉,也许这很有意思,但我想描述:" 为什么会提出这个问题? ".我已经回答问题,不同于其他在这里,这里这里昨晚.

在深入研究之后,我发现StreamCollector之间有许多重复的逻辑违反了不重复自己的原则,例如:Stream#map&Collectors#mapping,Stream#filter&Collectors#filtering in jdk-9 and.等等

但似乎合理,因为Stream遵守Tell,不要问原则/ Demeter法收藏家遵守继承原则.

我只能想到为什么Stream操作与Collector s 重复的几个原因如下:

  1. 我们不关心如何在大环境中创建Stream.在这种情况下,Stream操作比Collector更有效和更快,因为它可以简单地将Stream映射到另一个Stream,例如:

    consuming(stream.map(...));
    consuming(stream.collect(mapping(...,toList())).stream());
    
    void consuming(Stream<?> stream){...}
    
    Run Code Online (Sandbox Code Playgroud)
  2. 收集器功能更强大,可以将收集器组合在一起收集流中的元素,但Stream只提供一些有用/高度使用的操作.例如:

    stream.collect(groupingBy(
      ..., mapping(
            ..., collectingAndThen(reducing(...), ...)
           )
    ));
    
    Run Code Online (Sandbox Code Playgroud)
  3. 在执行一些更简单的工作时,操作比收集器更具表现力,但它们比收集器更慢,因为它将为每个操作创建一个新流,而 …

java java-8 java-stream

3
推荐指数
2
解决办法
126
查看次数

标签 统计

java ×2

java-8 ×2

java-stream ×2

sum ×1