平时很少这样写Lambda 看到大佬发的文章 自己手写了下,学习提升 原文地址在最后
public class User implements Serializable {
private long id;
private String username;
private int gender;
...省略get/set...
}
public class TestLambda {
public static void main(String[] args) {
//list2Map();
//doFilter();
//doForeach();
//doGroupingBy();
//doSort();
//doDistinct();
//doFindFirst();
//doAnyMatch();
//doAllMatch();
//doMap();
//doReduce();
//doPeek();
//doMinMax();
doCount();
}
private static void doCount() {
List<User> userList = new ArrayList<>();
User u1 = new User();
u1.setName("A");
u1.setId(1);
u1.setGender(1);
User u2 = new User();
u2.setName("B");
u2.setId(2);
u2.setGender(0);
User u3 = new User();
u3.setName("C");
u3.setId(3);
u3.setGender(0);
userList.add(u1);
userList.add(u2);
userList.add(u3);
//主要统计元素数量
System.out.println(userList.stream().count());
}
private static void doMinMax() {
List<User> userList = new ArrayList<>();
User u1 = new User();
u1.setName("A");
u1.setId(1);
u1.setGender(1);
User u2 = new User();
u2.setName("B");
u2.setId(2);
u2.setGender(0);
User u3 = new User();
u3.setName("C");
u3.setId(3);
u3.setGender(0);
userList.add(u1);
userList.add(u2);
userList.add(u3);
userList.stream().max(Comparator.comparing(User::getId)).ifPresent(user -> System.out.println("max:"+JSON.toJSONString(user)));
userList.stream().min(Comparator.comparing(User::getId)).ifPresent(user -> System.out.println("min:"+JSON.toJSONString(user)));
}
private static void doPeek() {
List<User> userList = new ArrayList<>();
User u1 = new User();
u1.setName("A");
u1.setId(1);
u1.setGender(1);
User u2 = new User();
u2.setName("B");
u2.setId(2);
u2.setGender(0);
User u3 = new User();
u3.setName("C");
u3.setId(3);
u3.setGender(0);
userList.add(u1);
userList.add(u2);
userList.add(u3);
User resultUser = userList.stream().peek(user -> System.out.println(JSON.toJSONString(user))).reduce(new User(), (a, b) -> {
b.setId(a.getId() + b.getId());
return b;
});
System.out.println(JSON.toJSONString(resultUser));
}
private static void doReduce() {
//对集合中的元素做特殊处理
List<User> userList = new ArrayList<>();
User u1 = new User();
u1.setName("A");
u1.setId(1);
u1.setGender(1);
User u2 = new User();
u2.setName("B");
u2.setId(2);
u2.setGender(0);
User u3 = new User();
u3.setName("C");
u3.setId(2);
u3.setGender(0);
userList.add(u1);
userList.add(u2);
userList.add(u3);
User resultUser = userList.stream().reduce(new User(), (a, b) -> {
b.setId(a.getId() + b.getId());
return b;
});
System.out.println(JSON.toJSONString(resultUser));
}
private static void doMap() {
//对集合中的元素做特殊处理
List<User> userList = new ArrayList<>();
User u1 = new User();
u1.setName("A");
u1.setId(1);
u1.setGender(1);
User u2 = new User();
u2.setName("B");
u2.setId(2);
u2.setGender(0);
User u3 = new User();
u3.setName("C");
u3.setId(2);
u3.setGender(0);
userList.add(u1);
userList.add(u2);
userList.add(u3);
userList = userList.stream().map(user -> {
user.setName(user.getName().toLowerCase());
return user;
}).collect(Collectors.toList());
userList.forEach(user -> System.out.println(JSON.toJSONString(user)));
}
private static void doAllMatch() {
//判断是否都是这个元素
List<String> data = Arrays.asList("0","0");
boolean containedElement = data.stream().allMatch(str-> str.equals("0"));
System.out.println(containedElement);
}
private static void doAnyMatch() {
//判断是否包含这个元素
List<String> data = Arrays.asList("0","0","1","1","2","2");
boolean containedElement = data.stream().anyMatch(str-> str.equals("0"));
System.out.println(containedElement);
}
private static void doFindFirst() {
//返回集合第一个元素
List<String> data = Arrays.asList("0","0","1","1","2","2");
data.stream().findFirst().ifPresent(System.out::println);
}
private static void doDistinct() {
List<String> data = Arrays.asList("0","0","1","1","2","2");
data = data.stream().distinct().collect(Collectors.toList());
data.forEach(System.out::println);
}
private static void doSort() {
List<User> userList = new ArrayList<>();
User u1 = new User();
u1.setName("A");
u1.setId(1);
u1.setGender(1);
User u2 = new User();
u2.setName("B");
u2.setId(2);
u2.setGender(0);
User u3 = new User();
u3.setName("C");
u3.setId(2);
u3.setGender(0);
userList.add(u1);
userList.add(u2);
userList.add(u3);
//升序
userList = userList.stream().sorted(Comparator.comparing(User::getId)).collect(Collectors.toList());
userList.forEach(user -> System.out.println(JSON.toJSONString(user)));
//降序
userList = userList.stream().sorted(Comparator.comparing(User::getId).reversed()).collect(Collectors.toList());
userList.forEach(user -> System.out.println(JSON.toJSONString(user)));
}
private static void doGroupingBy() {
List<User> userList = new ArrayList<>();
User u1 = new User();
u1.setName("A");
u1.setId(1);
u1.setGender(1);
User u2 = new User();
u2.setName("B");
u2.setId(2);
u2.setGender(0);
User u3 = new User();
u3.setName("C");
u3.setId(2);
u3.setGender(0);
userList.add(u1);
userList.add(u2);
userList.add(u3);
Map<Integer, List<User>> result =userList.stream().collect(Collectors.groupingBy(User::getGender));
result.forEach((k,v) -> System.out.println(k+"--"+JSON.toJSONString(v)));
}
private static void doForeach() {
List<User> userList = new ArrayList<>();
User u1 = new User();
u1.setName("A");
u1.setId(1);
u1.setGender(1);
User u2 = new User();
u2.setName("B");
u2.setId(2);
u2.setGender(0);
User u3 = new User();
u3.setName("C");
u3.setId(2);
u3.setGender(0);
userList.add(u1);
userList.add(u2);
userList.add(u3);
//list froEach
userList.forEach(user -> System.out.println(JSON.toJSONString(user)));
Map<Long, User> userInfoMap = userList.stream().collect(Collectors.toMap(User::getId, userInfo -> userInfo, (k1, k2) -> k2));
userInfoMap.values().forEach(a->System.out.println(a.getName()));
//map froEach
userInfoMap.forEach((k, v) -> System.out.println(k + "---" + JSON.toJSONString(v)));
}
private static void doFilter() {
List<User> userList = new ArrayList<>();
User u1 = new User();
u1.setName("A");
u1.setId(1);
u1.setGender(1);
User u2 = new User();
u2.setName("B");
u2.setId(2);
u2.setGender(0);
User u3 = new User();
u3.setName("C");
u3.setId(2);
u3.setGender(0);
userList.add(u1);
userList.add(u2);
userList.add(u3);
List<User> result = userList.stream().filter(ele -> ele.getGender()==1).collect(Collectors.toList());
result.forEach(e ->System.out.println(e.getName()));
}
private static void list2Map() {
List<User> userList = new ArrayList<>();
User u1 = new User();
u1.setName("A");
u1.setId(1);
u1.setGender(1);
User u2 = new User();
u2.setName("B");
u2.setId(2);
u2.setGender(0);
User u3 = new User();
u3.setName("C");
u3.setId(2);
u3.setGender(0);
userList.add(u1);
userList.add(u2);
userList.add(u3);
Map<Long, User> userInfoMap = userList.stream().collect(Collectors.toMap(User::getId, userInfo -> userInfo, (k1, k2) -> k2));
userInfoMap.values().forEach(a->System.out.println(a.getName()));
}
}