klamo
3/28/2018 - 6:54 AM

steam操作

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());