stream
Stream生成并返回一个集合
——————————————————————————————————————————————————————————————————————————————————————————
List<String> collected = Stream.of("a", "b", "c").collect(Collectors.toList())
Stream生成并转换集合中的字母为大写后返回
——————————————————————————————————————————————————————————————————————————————————————————
List<String> collected = Stream.of("a", "b", "hello")
.map(String -> String.toUpperCase()) // <1>
.collect(toList());
找到集合中符合条件的最小值并返回
——————————————————————————————————————————————————————————————————————————————————————————
List<Track> tracks = asList(new Track("Bakai", 524),
new Track("Violets for Your Furs", 378),
new Track("Time Was", 451));
Track shortestTrack = tracks.stream()
.min(Comparator.comparing(track -> track.getLength()))
.get();
集合中有任何一个符合条件的值就返回true
——————————————————————————————————————————————————————————————————————————————————————————
List<Track> tracksOnColtrane = asList(new Track("Bakai", 524),
new Track("Violets for Your Furs", 378),
new Track("Time Was", 451));
boolean matchLength = tracksOnColtrane.stream()
.anyMatch(track -> track.getLength() > 500);
PS:
Stream 有三个 match 方法,从语义上说:
allMatch:Stream 中全部元素符合传入的 predicate,返回 true
anyMatch:Stream 中只要有一个元素符合传入的 predicate,返回 true
noneMatch:Stream 中没有一个元素符合传入的 predicate,返回 true
简便生成List
——————————————————————————————————————————————————————————————————————————————————————————
Arrays.asList("a", "b", "c")
找出集合中所有以数字开头的数据
——————————————————————————————————————————————————————————————————————————————————————————
List<String> beginningWithNumbers
= Stream.of("a", "1abc", "abc1")
.filter(value -> isDigit(value.charAt(0)))
.collect(toList());
合并两个集合
——————————————————————————————————————————————————————————————————————————————————————————
List<Integer> together = Stream.of(asList(1, 2), asList(3, 4))
.flatMap(numbers -> numbers.stream())
.collect(toList());