lambda - 收集后在 java8 上获取索引
问题描述
我有以下代码,我想使用 Java 8 流 API 进行翻译。
count = 0;
for (A a : someList) {
if (a.get() == 1) {
count++;
newList.add(new X(count));
}
}
映射时如何获得该计数?
newList = someList.stream
.filter(a -> a.get().equals("red"))
.map(a -> new X(count))
.collect(Collectors.toList());
解决方案
for
循环版本更适合这种类型的逻辑,但如果你真的想使用 Streams,那么我会保持简单,分两步完成,而不是尝试将所有逻辑转储到单个流管道中,这可能会导致可读性降低代码。
int count = (int)someList.stream()
.filter(a -> a.get().equals(“red”))
.count();
IntStream.rangeClosed(1, count)
.mapToObj(X::new)
.collect(toList());
正如已经提到的,这绝不比for
循环版本更好,但这里是为了说明,有时在使用流时,最好的方法是执行多次传递,而不是试图将所有内容都放入单个管道中。
推荐阅读
- typescript - 打字稿路径导致错误的导入
- node.js - npm 并发错误?当同时运行前端和后端时?
- python - 在python中查找组中最后满足一定条件的记录,并根据记录的类型创建一个新列
- r - 从与向量匹配的多个文件中获取工作表名称
- android - 在导航抽屉活动 Android 中添加额外内容
- reactjs - 如何访问组件内的 redux 存储?
- haskell - 递归方案允许递归调用之间的依赖关系(有序的变态?)
- python - 冒泡排序的问题没有对最后一个数字进行排序
- c# - 当 1 个或多个 TextBox 字段为空时禁用按钮
- c++ - 如何在 Visual Studio 中启用特定的 if-else 格式?