java - 在 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 操作效率低,尽管代码看起来更干净。
非常感谢您的帮助!
解决方案
您可以使用 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());
你可以用流做很多事情,这些只是一些例子。
推荐阅读
- http - 为什么建议使用 ctx 作为第一个参数?
- php - 未从 Codeigniter 中的数据库接收到数据
- javascript - FullCalendar.io。无法呈现后台事件
- php - 如何使用for循环php从添加更多动态附加多个选择框值中保存值?
- sql - 遍历sql中的记录
- distributed-database - 如何查看整个 TiDB 集群的健康状态?
- html - 如何在 Shopify 上访问/编辑 HTML 文件?
- php - 异步运行部分php文件
- java - org.apache.catalina.LifecycleException: 无法启动组件 [StandardEngine[Catalina].StandardHost[localhost]]
- android - 暂时启用定位高精度模式