映射到Java中的列表

时间:2018-11-23 06:58:49

标签: java list

在Java 8中,我可以使用map方法来映射流,例如

Stream.of("Hello", "world").map(s -> s.length())

给我一​​个包含整数[5, 5]的流。我正在尝试对列表执行相同操作。我想出了

List<String> list = ...

list.stream().map(s -> s.length()).collect(Collectors.toList())

这有效,但很冗长。有更简洁的解决方案吗?理想情况下,将有一个类似的map方法用于列表,但是我还没有找到任何方法。那么,还有其他选择吗?

2 个答案:

答案 0 :(得分:5)

  

尽可能紧凑

只需将其包装到您自己的实用程序函数中即可:

public <T, S> List<S> mapBy(List<T> items, Function<T, S> mapFn) {
    return items.stream().map(mapFn).collect(Collectors.toList());
}

现在您可以只使用mapBy(students, Student::getName)。没有比这更详细的了。

请注意,仅当这是您要进行的唯一数据突变时,这才有用。一旦有了更多的流运算符,您就希望应用它,否则这样做会更好,因为否则您将继续创建中间列表,这非常浪费。

答案 1 :(得分:1)

实际上考虑对列表中的每个元素进行操作,您需要对其进行流式处理或循环处理,因此流式处理比循环式更为简洁。有关更多信息,您可以将Lambda表达式替换为方法引用运算符

list.stream().map(String::length).collect(Collectors.toList());