使用Integer foo列出<String>到List <Integer>(String s)

pri*_*ain 2 java list java-8 java-stream

我有一个list List<String>(list1)和一个函数Integer foo(String s).使用Java 8的强大功能我希望通过应用于每个项目来转换list1为a .以下代码有效,但有一点问题:List<Integer>foolist1

List<Integer> list2 = list1.stream().mapToInt(s -> foo(s)).boxed().collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

foo回报null的一些元素list1一个NullPointerException被抛出.另外,我的解决方案看起来有点不方便.那么有更好的吗?

mko*_*bit 5

如果你将它映射到一个Integer,我看不到需要使用mapToInt然后使用boxed.

相反,您可以简单地使用map然后filter排除空值.

List<Integer> list2 =
    list1.stream()
       .map(s -> foo(s))
       .filter(Objects::nonNull)
       .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

如果要将空值保留在列表中,只需删除 filter

List<Integer> list2 =
    list1.stream()
       .map(s -> foo(s))
       .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)