问题标签 [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.
java - 在 Java 8 流中避免 NoSuchElementException
这个问题是对较早问题的后续问题:使用 Streams 添加 BigDecimals
BigDecimal
与使用 Java 8Stream
和 Lambda 表达式加起来有关的问题。在实现给出的答案后,我遇到了另一个问题:只要流为空,该Optional::get()
方法就会抛出一个NoSuchElementException
.
考虑以下代码:
普通 Java 代码对空集合没有问题,但新的 Java 8 代码可以。
在这里避免 NSEE 的最优雅的方法是什么?当然我们可以这样做:
但是有没有一种 Java-8 的方式来处理空集合?
java - 将对象流变成属性的链表
我的目标:以一种优雅的 Java-8 方式提取 a LinkedList
of User
s 并提取他们的用户名。LinkedList
我被困在试图将Stream
对象转换为LinkedList
. 我可以把它变成一个数组(Stream::toArray()
)然后把它变成一个List
(Arrays.asList(Stream::toArray())
),但这似乎是……不,谢谢。
我错过了什么吗?
java - Java 8:流与集合的性能
我是 Java 8 的新手。我仍然不深入了解 API,但我做了一个小型的非正式基准测试来比较新 Streams API 与旧集合的性能。
该测试包括过滤 的列表Integer
,并为每个偶数计算平方根并将其存储在 的结果List
中Double
。
这是代码:
以下是双核机器的结果:
对于这个特定的测试,流的速度大约是集合的两倍,并且并行性没有帮助(或者我使用它的方式错误?)。
问题:
- 这个考试公平吗?我犯了什么错误吗?
- 流比集合慢吗?有没有人对此做出良好的正式基准?
- 我应该争取哪种方法?
更新结果。
按照@pveentjer 的建议,我在 JVM 预热(1k 次迭代)后运行了 1k 次测试:
在这种情况下,流的性能更高。我想知道在运行时仅调用一次或两次过滤功能的应用程序中会观察到什么。
java - 试图理解 Java 8 中的 lambda 和流
我正在尝试理解 Java 8 中的 Lambda。
假设我有一个 Person 类,如下所示:
现在我想做的是找到所有女性,有小于 10 岁的孩子的人。
Pre java 8 我会这样做:
现在 allFemaleWithChildren 应该有我想要的。我一直在尝试使用流做同样的事情我认为我需要使用某种映射、过滤和减少
但是这段代码无法编译。我错过了什么。
另外,我不明白 reduce 方法可以用来做什么。
编译器说
cannot resolve method getAge()
。这是因为c
显然是一个集合而不是集合中的项目,这正是我想要的。
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?
java - 将 Java Stream 过滤为 1 个且仅 1 个元素
我正在尝试使用 Java 8Stream
在LinkedList
. 但是,我想保证只有一个匹配过滤条件。
拿这个代码:
此代码User
根据他们的 ID 找到一个。但是不能保证有多少User
s 匹配过滤器。
将过滤线更改为:
会抛出一个NoSuchElementException
(好!)
不过,如果有多个匹配项,我希望它会引发错误。有没有办法做到这一点?
java - 返回可调用IntStream 对象中 mapToObj 函数的列表
我需要使用执行一种方法创建 Callable 列表,其中每个都具有范围 [1..99) 中的 int 参数。我最初的想法是:
下一个想法是收集要列出的项目:
看起来不错,但在 mapToObj 函数中,内部 lambda 无法识别为 Callable<Double>。如果我使用这样的典型内部类,它可以工作:
有没有办法将返回类型传递给 lambda 表达式?
java - 将 Java 8 的 Optional 与 Stream::flatMap 一起使用
新的 Java 8 流框架和朋友们编写了一些非常简洁的 java 代码,但我遇到了一个看似简单但很难做到简洁的情况。
考虑一个List<Thing> things
and 方法Optional<Other> resolve(Thing thing)
。我想将 s 映射Thing
到Optional<Other>
s 并获得第一个Other
. 显而易见的解决方案是使用things.stream().flatMap(this::resolve).findFirst()
,但flatMap
要求您返回一个流,并且Optional
没有stream()
方法(或者它是 aCollection
还是提供将其转换为或将其视为 a 的方法Collection
)。
我能想到的最好的是:
但对于一个非常常见的情况来说,这似乎是非常冗长的。有人有更好的主意吗?
java - Java 8 流 - 链中的每个步骤都针对整个输入进行评估,或者项目是否通过?
说如果我有这个琐碎的程序
在幕后它是像 a) 还是 b) 那样工作
一个
乙
java - 向流中添加两个 Java 8 流或一个额外元素
我可以添加流或额外的元素,如下所示:
我可以随时添加新内容,如下所示:
但这很丑,因为concat
是静态的。如果concat
是一个实例方法,上面的例子会更容易阅读:
和
我的问题是:
1)有什么好的理由为什么concat
是静态的?还是我缺少一些等效的实例方法?
2)无论如何,有没有更好的方法呢?