我经常那样转换列表
editCell(id){
console.log("index" , id)
this.editable =true
}
有没有更短的版本?
答案 0 :(得分:4)
我认为您应该坚持已经拥有的东西。为什么?
请记住:简洁不是目标。清晰度是。两者经常并驾齐驱,但并非总是如此,我的感觉是他们可能不在您的情况下。
预订:我的风格和品味都赞成@Aomine使用的方法参考,但这是一个品味问题。如果您觉得它更清晰,请使用它,而不仅仅是因为它短了几个字符。
答案 1 :(得分:3)
没有使用流进行此操作的更短方法。
您可以导入import static java.util.stream.Collectors.*;
,然后按如下所示使用toList
来缩短代码,但要缩短一点。下面是使用流时的紧凑形式:
myList.stream().map(el -> el.name).collect(toList());
您还可以使用方法参考
myList.stream().map(T::getName).collect(toList());
其中T
是包含name
的类型的名称,尽管根据类型名称的长短不能保证将其缩短,但是确实提供了更好的可读性非常重要。
最终,正如所说的那样,它变得尽可能紧凑。
答案 2 :(得分:3)
您可以静态导入Collectors.*
,然后使用mapping(Function, Collector)
方法,如下所示:
myList.stream().collect(mapping(T::getName, toList()));
其中T::getName
是方法引用,而T
是列表中元素的类型。使用此方法更具可读性,并且几乎与编写相同:el -> el.name
答案 3 :(得分:3)
您可以创建一个静态助手方法来完成所有工作:
public static <FROM, TO> List<TO> convert(List<FROM> from, Function<FROM, TO> function) {
return from.stream().map(function).collect(Collectors.toList());
}
您要做的就是提供列表和任何映射功能:
List<YourClass> yourList = ...;
Function<YourClass, String> func = YourClass::getName;
List<String> converted = convert(yourList, func);
或更简洁:
List<String> converted = convert(yourList, YourClass::getName);