【发布时间】:2020-02-04 18:05:31
【问题描述】:
例如,我需要类似的东西:
Collection<String> collection = /* ... */;
Stream<Object> stream = /* ... */;
boolean containsAll = stream.map(Object::toString).containsAll(collection);
当然,我可以使用collect() 方法和调用Collection.containsAll() 将流的所有元素累积到另一个Collection 中,但是如果流太大并且处理其所有元素效率低下怎么办?
【问题讨论】:
-
我个人认为实际上最好选择
Set<String> temp = source.stream().map(Object::toString).collect(toSet()); boolean containsAll = temp.containsAll(collection); -
@OusmaneD。如果 流太大 如 OP 所假设的那样怎么办?想象一下
stream是延迟生成的并且并非所有元素都保存在内存中的情况。例如。使用Files::lines,您可以处理 huge 文件,即使它们无法放入您的记忆中。在这种情况下,收集到一个集合中会导致OutOfMemoryError。
标签: java collections java-8 java-stream contains