首页 > 解决方案 > 在 Java 中,什么是比 stream().forEach() 更有效但仍使用流操作的方法?

问题描述

例如,我有一个字符串列表(可能超过 5000 个,我需要效率!)。我想对它们中的每一个应用相同的操作,例如拆分或其他。

现在我使用

List<String> a = ....;
a.stream().forEach(x->{
    //some code here...
    //maybe a split?
    String[] ss=x.split("...");
    Arrays.stream(ss).forEach(y->{...});
});

我知道现在效率很低,但是我该如何改进呢?顺便说一句,不应该使用 parallelStream!

编辑:我尝试了地图操作,例如

a.stream.map(x->x.split(...)).collect(Collectors.toList())

但它比使用 forEach 操作效率低,尽管代码看起来更干净。

非常感谢您的帮助!

标签: javaalgorithmperformancejava-stream

解决方案


您可以使用 map 函数,将字符串映射到所需的值,然后遍历它们

a.stream().map(s -> s.split("...")).forEach(split -> {});

或者,您可以过滤它们,

a.stream().map(s -> s.split("...")).filter(split -> split.length > 0);

或者你可以收集它们,

a.stream().map(s -> s.split("...")).filter(split -> split.length > 0).collect(Collectors.toList());

你可以用流做很多事情,这些只是一些例子。


推荐阅读