为什么filter 只打印 3遍?? 他不得全部循环才知道有几个 字符串是 3个length

public class LazyStreams {
    private static int length(final String name) {
        System.out.println("getting length for " + name);
        return name.length();
    }
    private static String toUpper(final String name ) {
        System.out.println("converting to uppercase: " + name);
        return name.toUpperCase();
    }
    //...

    public static void main(final String[] args) {
        List<String> names = Arrays.asList("Brad", "Kate", "Kim", "Jack", "Joe", "Mike", "Susan", "George", "Robert", "Julia", "Parker", "Benson");

        final String firstNameWith3Letters = names.stream()
            .filter(name -> length(name) == 3)
            .map(name -> toUpper(name))
            .findFirst()
            .get();

        System.out.println(firstNameWith3Letters);
    }
}

后来搜了下,说延迟加载, '懒特性'
那么:
final String firstNameWith3Letters = names.stream()

            .filter(name -> length(name) == 3) //TODO 这种最后只要1个,是不是可以 取到第一个就返回了??? 因为最后只要一个findFirst
            .map(name -> toUpper(name))
            .findFirst()
            .get();
阅读 1.7k
1 个回答

看错了,只只需要 循环一个
对的

宣传栏