1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Java 1.8 List集合排序 去重 分组 过滤 合并操作

Java 1.8 List集合排序 去重 分组 过滤 合并操作

时间:2022-01-20 22:06:32

相关推荐

Java 1.8 List集合排序 去重 分组 过滤 合并操作

目录

一、排序二、去重三、分组四、过滤五、合并

一、排序

1、正序

List<UserVO> newvos = vos.stream().sorted(paring(UserVO::getTime)).collect(Collectors.toList());

2、逆序

List<UserVO> newvos = vos.stream().sorted(paring(UserVO::getTime).reversed()).collect(Collectors.toList());

3、根据某个属性或多个属性排序

多个属性排序:需要添加排序条件就在后面添加.thenComparing(UserVO::getxxx),它是在上一个条件的基础上进行排序

List<UserVO> list10 = listTemp.stream().sorted(paring(UserVO::getNum).thenComparing(UserVO::getName);

二、去重

1、去重

List<UserVO> newvos = vos.stream().distinct().collect(Collectors.toList());

2、根据某个属性去重(它将该字段还进行排序了)

List<UserVO> newvos = vos.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() ->new TreeSet<>(paring(UserVO::getId))), ArrayList::new));

3、根据某个属性去重(这个方法没有排序)

import java.util.function.Function;import java.util.function.Predicate;List<UserVO> newvos= result.stream().filter(distinctByKey(o -> o.getId())).collect(Collectors.toList());public static <T> Predicate<T> distinctByKey(Function<? super T, Object> keyExtractor) {Map<Object, Boolean> map = new HashMap<>();return t -> map.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null;}

4、对多个对象去重(它将该字段还进行排序了)

List<UserVO> newvos = list.stream().collect( Collectors.collectingAndThen( Collectors.toCollection(() -> new TreeSet<>(paring(o->o.getID()+ ";" + o.getName()))),ArrayList::new));

三、分组

1、单条件分组

Map<String, List<UserVO>> groupedMap = result.stream().collect(Collectors.groupingBy(dto -> dto.getId()));// 提取分组后的列表List<List<UserVO>> resultLists = new ArrayList<>(groupedMap.values());for (List<UserVO> resultList : resultLists) {//方法体}

2、多条件分组

在groupingBy里面添加分组条件(dto -> dto.getId() +“|” +dto.getName())

四、过滤

在集合中查询用户名user为lkm的集合

List<UserVO> newvos = vos.stream().filter(o ->"lkm".equals(o.getName())).collect(Collectors.toList());

五、合并

1、合并集合某个属性

List<UserVO> newvos = list.stream().collect(Collectors.toMap(BillsNums::getId, a -> a, (o1,o2)-> {o1.setNums(o1.getNums() + o2.getNums());o1.setSums(o1.getSums() + o2.getSums());return o1;})).values().stream().collect(Collectors.toList());

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。