当前位置: 首页 > 知识库问答 >
问题:

每个Java 8流和peek

史超英
2023-03-14

我偶然发现了一个我无法解决的任务。我不得不修改代码以打印abcabc而不是aabbcc

我明白为什么要这样印。

// prints 'a b c' then prints 'A B C'
List<String> strings = List.of("a", "b", "c");
    strings.stream()
           .peek(str -> System.out.println(str))
           .map(str -> str.toUpperCase())
           .forEach(str -> System.out.println(str));

我很感激任何帮助。

共有1个答案

马业
2023-03-14

这里有一种方法:

List<String> strings = List.of("a", "b", "c");
    strings.stream()
           .peek(str -> System.out.println(str))
           .sorted()
           .map(str -> str.toUpperCase())
           .forEach(str -> System.out.println(str));

sorted()操作必须处理的所有元素,然后终端操作才能开始输出这些元素(因为如果不遍历的所有元素,就无法对其进行排序)。

因此,这将导致在foreach()输出第一个大写元素之前,对所有元素执行peek()

 类似资料:
  • 假设我有这样一个列表: 是否可以使用Java8流从该列表中每隔一秒获取一个元素以获得以下内容? 或者甚至每三个元素? 基本上,我正在寻找一个函数来获取流的每n个元素:

  • 我有一个对象列表,如下所示,我想将它们按3个属性分组,并将第4个属性相加 我做了如下类似的事情,但它生成了许多地图,我无法得到求和的方法,因为它也需要一些逻辑 如何使用和逻辑获取分组列表列表?

  • 前提:我已经读过这个问题和其他问题,但我需要一些澄清。 我理解这条流。forEach方法不仅在处理并行流时起作用,这也解释了为什么 印刷品 但当涉及到中间操作时,当流被并行化时,顺序就不再有保障了。所以这个代码 会打印一些类似 说方法只影响其自身执行中元素的顺序是正确的吗?直观地说,我认为示例与 我的直觉错了吗?我是不是遗漏了整个机制的一些东西?

  • 我想得到以下数据结构:Map 给定的是一个包含字段als原语(位置、目标、距离)或作为键(位置)加映射(目标)的类。从每个独特的位置,一个人可以瞄准多个目的地(按距离)。 关于第二个代码段:结果应该与第一个代码中的结果相同。唯一的区别是,LocationPair中提供的数据已被进一步处理,因此目的地和距离已被放入其目标地图中。 我知道这一定是可能的,但不知何故,我无法弄清楚如何完成它。上面的流代码

  • 在我从在线材料中找到的以下jooq片段中,有一个从“jooq结束于此”到“流开始”的转换 这是否意味着SQL查询生成发生,直到取得()?之后stream()启动,一切都在java进程内存中 或者像active record DSL这样的java 8流和整个代码段是否转换为SQL查询,包括stream()部分? 这是因为我已经看到了示例,其中sortBy/group pingBy是在许多在线示例的流

  • 谁能给我解释一下为什么下面的代码不起作用? 我试图了解Java8的新特性,并解决了BerlinClock卡塔问题。在此期间,我必须以的格式解析字符串--我想使用流,并编写了下面的代码。 但是运行时系统(我认为)抱怨无法执行显式类型转换。