用map操作或flatmap操作的return stream.empty()过滤非空对象更好吗?

syqv5f0l  于 2021-07-09  发布在  Java
关注(0)|答案(1)|浏览(277)

我真的很好奇这个简单的性能/最佳使用/最佳实践相关案例场景:
如果我有这个简单的片段:

List<String> list = Arrays.asList("Hello1", "Hello2", "Hello3", "Jhon", "Doe", "Hello4");
list.stream()
                .map(s -> {
                    if (s.contains("Hello")) {
                        return "World";
                    }
                    return null;
                })
                .filter(Objects::nonNull)
                .collect(Collectors.toList());

list.stream()
                .flatMap(s -> {
                    if (s.contains("Hello")) {
                        Stream.of("World");
                    }
                    return Stream.empty();
                })
                .collect(Collectors.toList());

注:我知道也许Map String 只是把它转换成另一个 String 这没有多大意义,但这只是出于示例表示的目的,它可以是pojo或整数或其他任何形式。
哪一个表现更好?或者哪一个是最好的选择?
我试图理解在使用流链时,在逻辑中出现一些条件的情况下,哪个是更好的选择。
谢谢您。

vxqlmq5t

vxqlmq5t1#

我不会像其他人那样创造和 Package Stream 用于避免空值,也不返回 null 对于不匹配的字符串,可以简单地筛选 Hello 单词然后使用 map 用于值修改

list.stream()
     .filter(s->s.contains("Hello"))
     .map(s -> "world")
     .collect(Collectors.toList());

相关问题