问题标签 [java-stream]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
3688 浏览

java - 在 Java 8 流中避免 NoSuchElementException

这个问题是对较早问题的后续问题:使用 Streams 添加 BigDecimals

BigDecimal与使用 Java 8Stream和 Lambda 表达式加起来有关的问题。在实现给出的答案后,我遇到了另一个问题:只要流为空,该Optional::get()方法就会抛出一个NoSuchElementException.

考虑以下代码:

普通 Java 代码对空集合没有问题,但新的 Java 8 代码可以。

在这里避免 NSEE 的最优雅的方法是什么?当然我们可以这样做:

但是有没有一种 Java-8 的方式来处理空集合?

0 投票
1 回答
30997 浏览

java - 将对象流变成属性的链表

我的目标:以一种优雅的 Java-8 方式提取 a LinkedListof Users 并提取他们的用户名。LinkedList

我被困在试图将Stream对象转换为LinkedList. 我可以把它变成一个数组(Stream::toArray())然后把它变成一个ListArrays.asList(Stream::toArray())),但这似乎是……不,谢谢。

我错过了什么吗?

0 投票
5 回答
106050 浏览

java - Java 8:流与集合的性能

我是 Java 8 的新手。我仍然不深入了解 API,但我做了一个小型的非正式基准测试来比较新 Streams API 与旧集合的性能。

该测试包括过滤 的列表Integer,并为每个偶数计算平方根并将其存储在 的结果ListDouble

这是代码:

以下是双核机器的结果:

对于这个特定的测试,流的速度大约是集合的两倍,并且并行性没有帮助(或者我使用它的方式错误?)。

问题:

  • 这个考试公平吗?我犯了什么错误吗?
  • 流比集合慢吗?有没有人对此做出良好的正式基准?
  • 我应该争取哪种方法?

更新结果。

按照@pveentjer 的建议,我在 JVM 预热(1k 次迭代)后运行了 1k 次测试:

在这种情况下,流的性能更高。我想知道在运行时仅调用一次或两次过滤功能的应用程序中会观察到什么。

0 投票
2 回答
1939 浏览

java - 试图理解 Java 8 中的 lambda 和流

我正在尝试理解 Java 8 中的 Lambda。

假设我有一个 Person 类,如下所示:

现在我想做的是找到所有女性,有小于 10 岁的孩子的人。

Pre java 8 我会这样做:

现在 allFemaleWithChildren 应该有我想要的。我一直在尝试使用流做同样的事情我认为我需要使用某种映射、过滤和减少

但是这段代码无法编译。我错过了什么。

另外,我不明白 reduce 方法可以用来做什么。

编译器说 cannot resolve method getAge()。这是因为c显然是一个集合而不是集合中的项目,这正是我想要的。

0 投票
1 回答
5190 浏览

java - How to use Collectors.grouping in Java 8 Stream API to create a Map

I am looking for the first time to the Stream API of Java 8. And I have tried to create a filter to remove elements from a Map.

This is my Map:

I want to remove entries with value <= than 0. So I want to apply a filter and get back a new map(Map<String, Integer>).

This is what I have been trying:

I get a HashMap<String, ArrayList<HashMap$Node>>. So, not what I was looking for.

I also tried:

And this causes:

Basically I don't know how to build the values of my new Map.

This is the javadoc of Collectors, they wrote a few examples of groupingBy, but I have not been able to get it working.

So, how should I write the collect to get my Map built as I want?

0 投票
24 回答
283456 浏览

java - 将 Java Stream 过滤为 1 个且仅 1 个元素

我正在尝试使用 Java 8StreamLinkedList. 但是,我想保证只有一个匹配过滤条件。

拿这个代码:


此代码User根据他们的 ID 找到一个。但是不能保证有多少Users 匹配过滤器。

将过滤线更改为:

会抛出一个NoSuchElementException(好!)

不过,如果有多个匹配项,我希望它会引发错误。有没有办法做到这一点?

0 投票
3 回答
2534 浏览

java - 返回可调用IntStream 对象中 mapToObj 函数的列表

我需要使用执行一种方法创建 Callable 列表,其中每个都具有范围 [1..99) 中的 int 参数。我最初的想法是:

下一个想法是收集要列出的项目:

看起来不错,但在 mapToObj 函数中,内部 lambda 无法识别为 Callable<Double>。如果我使用这样的典型内部类,它可以工作:

有没有办法将返回类型传递给 lambda 表达式?

0 投票
12 回答
199763 浏览

java - 将 Java 8 的 Optional 与 Stream::flatMap 一起使用

新的 Java 8 流框架和朋友们编写了一些非常简洁的 java 代码,但我遇到了一个看似简单但很难做到简洁的情况。

考虑一个List<Thing> thingsand 方法Optional<Other> resolve(Thing thing)。我想将 s 映射ThingOptional<Other>s 并获得第一个Other. 显而易见的解决方案是使用things.stream().flatMap(this::resolve).findFirst(),但flatMap要求您返回一个流,并且Optional没有stream()方法(或者它是 aCollection还是提供将其转换为或将其视为 a 的方法Collection)。

我能想到的最好的是:

但对于一个非常常见的情况来说,这似乎是非常冗长的。有人有更好的主意吗?

0 投票
2 回答
3299 浏览

java - Java 8 流 - 链中的每个步骤都针对整个输入进行评估,或者项目是否通过?

说如果我有这个琐碎的程序

在幕后它是像 a) 还是 b) 那样工作

一个

0 投票
8 回答
117024 浏览

java - 向流中添加两个 Java 8 流或一个额外元素

我可以添加流或额外的元素,如下所示:

我可以随时添加新内容,如下所示:

但这很丑,因为concat是静态的。如果concat是一个实例方法,上面的例子会更容易阅读:

我的问题是:

1)有什么好的理由为什么concat是静态的?还是我缺少一些等效的实例方法?

2)无论如何,有没有更好的方法呢?