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

Java流:使用带有map和forEach[duplicate]的println

商冠玉
2023-03-14
ArrayList<Integer> al = new ArrayList<Integer>();
al.add(10);
al.add(20);
al.add(30);

al.stream().forEach(System.out::println); // This works

al.stream().map(System.out::println); // This fails with error as "Incompatible types: expected not void but compile-time declaration for method reference has void return type"

有人能解释一下吗?

共有1个答案

劳英华
2023-03-14

用一种简单的英语方式:

foreach应用一个对流中的每个元素都有副作用的方法,它是一个终端操作,不返回任何内容:

...
.forEach(thisElement -> doThatWith(thisElement))

例子:

.forEach(thisElement -> System.out.println(thisElement))
.forEach(thisElement -> aList.add(thisElement))
...
.map(thisElement -> transformIntoAnotherElement(thisElement))
.map(thisElement -> String.valueOf(thisElement)) // returns Stream<String>
.map(thisElement -> new MyObject(thisElement)) // returns Stream<MyObject>
 类似资料:
  • 我见过大多数使用Stream按值对映射进行排序的例子,但大多数使用的是比我的版本稍微简单的版本,对我的情况不起作用。 有一个类似于我的例子的网站,但它的工作效果并不好,因为它由于函数而创建了“int cannot be dereferenced”错误,因为它不是用来比较原语的。 如果有人能指出我做错了什么,我将不胜感激。谢谢

  • 有时,在处理流的两个步骤之间对流中的每个元素进行“处理”(例如打印)会很方便,例如调试。 一个简单的例子可能是这样的,不幸的是,这不起作用,因为消耗流: 如何做到这一点?

  • 我有一个用于列表的for循环,它检查数据库中是否存在索引值。

  • 问题内容: 我正在使用和。我知道,这两个类和是不相容的,但我仍然希望做的相当自然的事情- 我想换了每一个在每个迭代步骤一解析(嵌套内部的)。我尝试这样做: 当我尝试编译此代码时,即使看起来很自然,实际上我也会收到“不兼容的类型”错误。所以,我的问题是迭代的最佳方法是什么? 问题答案: 显然,实现了一个 原始 Iterator。这意味着每个元素都被视为。您可以尝试投射: 这就是在Java 1.4和更

  • 问题内容: 我创建了一种计算字母数字的方法。我正在学习流(函数式编程)并尝试尽可能多地使用它们,但是在这种情况下,我不知道该怎么做: 那么,如何使用Java 8流重写它呢? 问题答案: 避免使用有状态的索引计数器,如其他答案中所述的基于-解决方案。如果流是并行的,它们将失败。相反,流式传输索引: 上面假设传入列表是字母,因此不应包含重复的字符。如果您有可能重复元素,则多个元素将映射到同一键,然后需

  • 我可以在varArgs上使用或吗?

  • 问题内容: 我知道有很多这样的话题。而且我知道基础知识:既可以在原始阵列上运行,也可以在新阵列上运行。 就我而言: 这是输出: 我不明白为什么要使用更改to的值。 如果这是一个愚蠢的问题,我感到很抱歉,但是我是这种语言的新手,到目前为止我发现的答案并不令我满意。 问题答案: 他们是不一样的。让我解释一下区别。 :这会遍历列表,并对每个列表成员应用一些有副作用的操作(例如:将每个列表项保存到数据库)

  • 我有一个数组列表 如何使用forEach和lambda表达式迭代此列表。