Java8 List,Map的lambda 语法糖

1.list的循环

list使用前要进行非null判断

List<UserAccount> list = new ArrayList<>();
//普通循环-优点:可以知道当前循环的i的值
for(int i=0; i<list.size; i++){
 System.out.println(user.getId());
}

//增强for循环
for(Integer user:list){
 System.out.println(user.getId());
}

//forEach循环list
list.forEach((UserAccount user) -> {
            System.out.println(user.getId());
            System.out.println(user.userName());
});

//forEach只有一行代码时 大括号可以省略,使代码更简洁
list.forEach((UserAccount user) -> System.out.println(user.getId()));

//再进行简写
list.forEach(user -> System.out.println(user.getId()));

 

2.list<int> 排序

List<Integer> list = Arrays.asList(1, 2, 3, 9, 11, 6);

//修改原来的list
//正序
list.sort(Comparator.naturalOrder());
//倒序
list.sort(Comparator.reverseOrder());

//如果不想改变原来的list,返回一个新的list可以使用

//正序
List<Integer> collect = list.stream().sorted(Comparator.naturalOrder()).collect(Collectors.toList());
//倒序
List<Integer> collect = list.stream().sorted(Comparator.reverseOrder()).collect(Collectors.toList());

 

3.list 对象 属性排序

List<UserAccount> list = new ArrayList<>();

//修改原来的list
//正序
list.sort(Comparator.comparing(UserAccount::getId));

//倒序
list.sort(Comparator.comparing(UserAccount::getId).reversed())

如果不想改变原来的list可以使用下面的方法
//正序流操作-根据用户的id排序
List<UserAccount> collect = list.stream().sorted(Comparator.comparing(UserAccount::getId)).collect(Collectors.toList());

//倒序流操作-根据时间倒序
List<UserAccount> collect1 = list.stream().sorted((p1, p2) -> p2.getAddTime().compareTo(p1.getAddTime())).collect(Collectors.toList());

//排序并得到最大id的对象
User user = userList.stream().max(Comparator.comparing(User::getId)).get();
//排序并得到最小id的对象
User user = userList.stream().min(Comparator.comparing(User::getId)).get();

 

4.list 对象 根据对象属性过滤 

//过滤 list中 用户邮箱为111的用户
List<UserAccount> lis = list2.stream().filter(user -> user.getEmail().equals("111")).collect(Collectors.toList());

//返回符合表达式的集合的第一个对象
Optional<UserAccount> first = list2.stream().filter(user -> user.getEmail().equals("111")).findFirst();

//判断是否有符合条件的值,然后在进行操作
first.ifPresent(a-> System.out.println(a));

 

5.list对象  根据对象的某个属性生成一个新的list

//获取邮箱字段集合
List<String> list = list.stream().map(UserAccount::getEmail).collect(Collectors.toList());

 

6.分组,和排序

//根据id分组
final Map<Integer, List<UserAccount>> collect = list.stream().collect((Collectors.groupingBy(UserAccount::getId

//分组并根据key 排序
TreeMap<Integer, List<Order>> treeMap = subOrders.stream().collect(Collectors.groupingBy(Order::getRefId, TreeMap::new, Collectors.toList()));
                                                                                             
//如果需要倒序
NavigableMap<Integer, List<Order>> integerListNavigableMap = subOrders.stream().collect(Collectors.groupingBy(Order::getRefId, TreeMap::new, Collectors.toList())).descendingMap();

 

7.list  转  map

//map 的key 和value 都是属性值
Map<String, String> map = list.stream().collect(Collectors.toMap(User::getId, User::getName));

//key为属性 value为对象本身
Map<String, User> map = userList.stream().collect(Collectors.toMap(User::getId, t->t));
//或
Map<String, User> map = userList.stream().collect(Collectors.toMap(User::getId, Function.identity()));

//如果在转换的过程中, list对象的属性作为map的key时有重复 会报错,java.lang.IllegalStateException: Duplicate key
//可以用下面的方法解决
//1.拼接
Map<String, String> map = list.stream().collect(Collectors.toMap(User::getId, User::getName, (old,newK)->old+","+newK));
Map<String, User> map = list.stream().collect(Collectors.toMap(User::getId, t->t, (old, newK)->old+","+newK));

//或取新值或老值
Map<String, String> map = list.stream().collect(Collectors.toMap(User::getId, User::getName, (old,newK)->newK));
Map<String, User> map = list.stream().collect(Collectors.toMap(User::getId, t->t, (old, newK)->newK));

//还可以排序 这里根据key排序 注意这里的返回值不同
TreeMap<String, User> collect = list.stream().collect(Collectors.toMap(User::getId, t->t, (old, newK)->newK, TreeMap::new));

 

8.map 转list

//key list
Map<String, User> map = new HashMap<>();
List<String> strings = new ArrayList<>(map.keySet());

//value对象list
Map<String, User> map = new HashMap<>();
List<User> list = map.entrySet().stream().map(e -> e.getValue()).collect(Collectors.toList());

待续....

posted @ 2022-02-21 14:54  loveCrane  阅读(411)  评论(0编辑  收藏  举报