整理一下常用的lambda语法和示例。
示例实体:
@Data
@Accessors(chain = true)
@AllArgsConstructor
public static class User {
private Integer id;
private String name;
private String sex;
private Integer age;
}
public static List<User> users;
static {
users = new ArrayList<>();
users.add(new User(1, "libai", "M",23));
users.add(new User(2, "zhaoyun", "M",18));
users.add(new User(3, "hanxin", "F",19));
users.add(new User(4, "kai", "F",21));
users.add(new User(5, "yao", "F",26));
}
public static void main(String[] args) {
}
forEach
遍历集合。
users.stream().forEach(
item -> System.out.println(item.getId())
);
filter
从集合筛选出符合条件的记录。
示例一:返回符合条件的第一条记录。
Optional<User> optional = users.stream().filter(
item -> item.getId().equals("1")
).findFirst();
示例二:返回符合条件所有记录。
List<User> collect= users.stream().filter(
item -> item.getId().equals("1")
).collect(Collectors.toList());
Groupingby
示例:根据某个字段相同的实体分成一组。
Map<String, List<User>> collect = users.stream().collect(
Collectors.groupingBy(c -> c.getSex())
);
Comparator
示例:按照User的年龄升序给list排序。
users.sort((User o1, User o2) -> o1.getAge().compareTo(o2.getAge()));
listToMap
示例一:list转换成map,map的key为user的Id,value为user实体。
Map<Integer, User> userMap= users.stream().collect(
Collectors.toMap((key -> key.getId()), (value -> value))
);
示例二:list转换成map,map的key为user的Id,value为user某个字段。
Map<Integer, String> propMap = users.stream().collect(
Collectors.toMap(User::getId, User::getName)
);
map-reduce
示例:计算list中User的年龄总和。
Optional<Integer> reduce = users.stream().map(User::getAge).reduce((i, j) -> i + j);
flatmap
示例:给定String数组,去重输出。
String[] words = new String[]{"Hello","World"};
List<String> a = Arrays.stream(words)
.map(word -> word.split(""))
.flatMap(Arrays::stream)
.distinct()
.collect(toList());
a.forEach(System.out::print);