gpt4 book ai didi

java - 如何对列表的每个元素调用 lambda 并在新列表中获取结果?我的工作版本太冗长

转载 作者:搜寻专家 更新时间:2023-10-31 08:18:46 26 4
gpt4 key购买 nike

我想对列表的每个元素调用 lambda 函数,并在新列表中获取结果。

我当前的版本是这样的:

b = a.stream().map(i-> i+1).collect(Collectors.toList());

但它似乎相当冗长,并且通过从列表到流的转换所需的所有样板代码隐藏了代码的意图,反之亦然。其他语言(例如 ruby​​)的相同代码会更简洁,如下所示:

b = a.map{|i| i+1}

当然可以这样做:

for (int i: a) {
b.add(i+1);
}

但它看起来有点过时,而且不如 lambda 版本灵活。

为了改变现有列表,Holger's comment list.replaceAll(i->i+1) 很好,但我有兴趣创建一个新的 List 对象。

有没有一种简洁的方法可以对列表的每个元素调用 lambda 并用结果创建一个新的?

最佳答案

为了更简洁,您可以使用 Stream API 的一些包装器,或者完全绕过它。你可以实现类似的东西:

class ListUtil {
public static <A, B> List<B> map(List<A> list, Function<? super A, ? extends B> f) {
List<B> newList = new ArrayList<>(list.size());
for(A a:list) {
newList.add(f.apply(a));
}
return newList;
}
}

然后使用静态导入,你可以这样写:

b = map(a, i -> i + 1);

关于java - 如何对列表的每个元素调用 lambda 并在新列表中获取结果?我的工作版本太冗长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46788291/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com