stream 流用法

准备

初始一个集合对象,以供测试:

1
2
3
4
5
List<User> list = new ArrayList<>();
list.add(new User("张三", 12));
list.add(new User("李四", 16));
list.add(new User("王五", 18));
list.add(new User("赵六", 20));

filter

1
list.stream().filter(u -> u.getAge() >= 18).collect(Collectors.toList());
1
2
User{name='王五',  age=18}
User{name='赵六', age=20}

map

1
list.stream().map(User::getName).collect(Collectors.toList());
1
2
3
4
张三
李四
王五
赵六

sorted

1
2
3
list.stream().sorted(Comparator.comparing(User::getAge)).collect(Collectors.toList());

list.stream().sorted(Comparator.comparing(User::getAge).reversed()).collect(Collectors.toList());
1
2
3
4
5
6
7
8
9
10
User{name='张三',  age=12}
User{name='李四', age=16}
User{name='王五', age=18}
User{name='赵六', age=20}


User{name='赵六', age=20}
User{name='王五', age=18}
User{name='李四', age=16}
User{name='张三', age=12}

list 转 map

1
2
3
list.stream().collect(Collectors.toMap(User::getAge, Function.identity()));

list.stream().collect(Collectors.toMap(User::getAge,Function.identity(),(a,b)->b));
1
2
3
4
5
6
7
8
9
10
11
12
{
16=User{name='李四', age=16},
18=User{name='王五', age=18},
20=User{name='赵六', age=20},
12=User{name='张三', age=12}
}
{
16=User{name='李四', age=16},
18=User{name='王五', age=18},
20=User{name='赵六', age=20},
12=User{name='张三', age=12}
}

IntStream

> range(a,b), 包头不包尾,相当于 (int i = a;i<b;i++);< >rangeClosed(a,b),包头包尾,相当于 (int i = a;i<=b;i++)<

1
2
3
IntStream.range(0,list.size()).forEach(i->System.out.println(list.get(i).getName()));

IntStream.rangeClosed(1,list.size()-1).forEach(i->System.out.println(list.get(i).getName()));
1
2
3
4
5
6
7
8
张三
李四
王五
赵六

李四
王五
赵六
0%