一 簡單的stream
parallelStream慎用,除非你知道它內部干了什么
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8);
list.parallelStream().forEach(System.out::println);
list.parallelStream().forEachOrdered(System.out::println);

6 5 7 8 3 1 4 2 --------- 1 2 3 4 5 6 7 8
二 簡單的stream, collect, sum, count, groupBy, partition
假設有一個這樣的對象流:
+----------+------------+-----------------+ | Name | Age | Address | +----------+------------+-----------------+ | aa | 11 | shanghai | | bb | 61 | beijing | | cc | 30 | dalian | | dd | 90 | dalian | +----------+------------+-----------------+
(1)初始化
List<User> userList = Stream.of( new User("aa", 11, "shanghai"), new User("bb", 61, "beijing"), new User("cc", 30, "dalian"), new User("dd", 90, "dalian") ).collect(Collectors.toList());
(2)取某一字段 stream & collect
System.out.println(userList.stream().map(User::getAddress).collect(Collectors.toList())); System.out.println("---------"); ArrayList<String> arrayList = userList.stream().map(User::getAddress).collect(Collectors.toCollection(ArrayList::new)); System.out.println(arrayList); System.out.println("---------"); System.out.println(userList.stream().map(User::getAddress).collect(Collectors.joining("@@")));

[shanghai, beijing, dalian, dalian] --------- [shanghai, beijing, dalian, dalian] --------- shanghai@@beijing@@dalian@@dalian
(3)取總和 sum
System.out.println(userList.stream().mapToInt(User::getAge).sum());

192
(3)分組
Map<String, List<User>> addressMap = userList.stream().collect(Collectors.groupingBy(User::getAddress));
System.out.println(addressMap);

{shanghai=[User[name=aa,address=shanghai]], dalian=[User[name=cc,address=dalian], User[name=dd,address=dalian]], beijing=[User[name=bb,address=beijing]]}
(4)分組取和,平均數
Map<String, Long> addressCountMap = userList.stream().collect(Collectors.groupingBy(User::getAddress, Collectors.counting())); System.out.println(addressCountMap); Map<String, Double> map = userList.stream().collect(Collectors.groupingBy(User::getAddress, Collectors.averagingInt(User::getAge))); System.out.println(map);

{shanghai=1, dalian=2, beijing=1}
{shanghai=11.0, dalian=60.0, beijing=61.0}
(5)分區 分區是一種特殊的分組,結果 map 至少包含兩個不同的分組——一個true,一個false
Map<Boolean, List<User>> partitionMap = userList.stream().collect(Collectors.partitioningBy(user -> Objects.equals(user.getAddress(), "beijing"))); System.out.println(partitionMap); System.out.println(partitionMap.get(true)); Map<Boolean, Map<String, Long>> partitionGroupByMap = userList.stream() .collect(Collectors.partitioningBy(user -> user.getAge() < 70, Collectors.groupingBy(User::getAddress, Collectors.counting()))); System.out.println(partitionGroupByMap);

{false=[User[name=aa,address=shanghai], User[name=cc,address=dalian], User[name=dd,address=dalian]], true=[User[name=bb,address=beijing]]} [User[name=bb,address=beijing]] {false={dalian=1}, true={shanghai=1, dalian=1, beijing=1}}