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();
看错了,只只需要 循环一个
对的