首页 > 编程语言 >java8 list集合更具对象属性去重处理

java8 list集合更具对象属性去重处理

时间:2022-09-22 18:25:33浏览次数:50  
标签:stream Collectors 更具 list order ------- collect VIP java8

话不多说直接上代码

 

package com.leinuo.jvm.list;

import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.stream.Collectors;

public class App {
    
    public static void main(String[] args) {
        listDistinct();
    }
    
    public static void listDistinct(){

        System.out.println("根据VIP order去重保留最先重复的数据-------1----2---" );
        List<VIP> collect1 = Arrays.stream(VIP.values()).collect(Collectors.toList());
        collect1 = collect1
                .stream()
                .collect(
                        Collectors.collectingAndThen(
                                Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(VIP::getOrder))),
                                ArrayList::new
                        )
                );
        System.out.println("根据VIP order去重并排序-------1-------"+collect1.toString() );

        List<VIP> collect2 = Arrays.stream(VIP.values()).collect(Collectors.toList());
        collect2 = collect2.stream().filter(distinctByKey(VIP::getOrder)).collect(Collectors.toList());
        System.out.println("根据VIP order去重并排序-------2-------"+collect2.toString() );

        System.out.println("根据VIP order去重保留最后重复的数据-------3----4---5--" );
        
        List<VIP> collect3 = Arrays.stream(VIP.values()).collect(Collectors.toList());
        Collections.reverse(collect3);
        collect3 =
                collect3
                        .stream()
                        .collect(
                                Collectors.collectingAndThen(
                                        Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(VIP::getOrder))),
                                        ArrayList::new
                                )
                        );
        System.out.println("根据VIP order去重并排序-------3-------"+collect3.toString() );

        List<VIP> collect4 = Arrays.stream(VIP.values()).collect(Collectors.toList());
        Collections.reverse(collect4);
        collect4 =
                collect4
                        .stream()
                        .filter(distinctByKey(VIP::getOrder))
                        .sorted(Comparator.comparing(VIP::getOrder))
                        .collect(Collectors.toList());
        System.out.println("根据VIP order去重并排序-------4-------"+collect4.toString() );

        List<VIP> collect5 = Arrays.stream(VIP.values()).collect(Collectors.toList());
        collect5 = collect5.stream().collect(Collectors
                .toMap(VIP -> { return VIP.getOrder();},Function.identity(), (e1, e2) -> e2))
                        .values().stream().collect(Collectors.toList());
        Collections.reverse(collect5);
        System.out.println("根据VIP order去重并排序-------5-------"+collect5.toString() );
    }

    private static <T> Predicate<T> distinctByKey(Function<? super T, Object> keyExtractor) {
        Map<Object, Boolean> seen = new ConcurrentHashMap<>();
        return t -> seen.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null;
    }
    
}
public enum VIP {
        VIP1(6),
        VIP2(5),
        VIP3(4),
        VIP4(2),
        VIP5(2),
        VIP6(1);


        private Integer order;

        VIP(int order) {
            this.order = order;
        }

        public Integer getOrder() {
            return order;
        }

        public void setOrder(Integer order) {
            this.order = order;
        }
}

 

标签:stream,Collectors,更具,list,order,-------,collect,VIP,java8
From: https://www.cnblogs.com/leinuo2016/p/16715663.html

相关文章

  • 线程安全的List都有什么?
    线程安全的List都有什么?Vector线程安全底层数组扩容两倍用collections包装ArrayList使用Collections.synchronizedList(list);将list包装成SynchronizedList需......
  • 【WPF】WPF ListView GridView 操作
    wpf这方面首先就是界面代码直接上代码GridView样式分为表格头样式和表格Item样式。表格头类:GridViewColumnHeader表格Item类:ListViewItem,GridViewRowPresenter<!--......
  • Oracle启动监听报错:The listener supports no services解决
    前几天一台项目开发使用的Oracle11g服务器重启系统之后,出现了几个莫名的报错,下面是其中一个,已解决。$lsnrctlstart报错提示:ThelistenersupportsnoservicesTheco......
  • 在输入shell命令的list_namespace时,报 :org.apache.hadoop.hbase.PleaseHoldException:
    今天弄了一下午这个问题,弄到了将近十点,终于解决了,终于解决这个问题了,感谢旭旭大佬相助,不再报错了。本来今天中午,我已经弄好了,结果我午睡了一下再看就报错了,哎。今天本来已......
  • Java8之list.stream的常见使用
    List<Integer>list=newArrayList<Integer>();从小到大方法:Collections.sort(list);从大到小方法:Collections.sort(list,Collections.reverseOrder());stream获取l......
  • otdolist 案例
    1.渲染默认任务  2.回车添加任务 3.删除任务  4.底部任务数量 5. tab栏切换  6.tab切换显示不同任务  7.清除已完成的任务  8.......
  • Java8 Stream使用汇总总结
    前言:近期在coding过程中经常使用到java8的Stream,故在此做个汇总总结,积累沉淀下常用方法,希望对读的人也有所帮助,下一篇总结下lambda。文章目录Java8Stream1Stream概......
  • 探索Java8:(五)Supplier和Consumer接口的使用
    Supplier是函数式编程的另一个接口,与Function、Predicate接口类似,区别在于Supplier不接收任何参数,只返回结果。Supplier的基本使用@FunctionalInterfacepublicinterfac......
  • df.values.tolist()
     在Python数据分析中,Pandas的DataFrame和list数据类型之间可以相互转换。1.1df.values.tolist():可以将DataFrame数据类型转化为list数据类型;1.2pd.DataFrame():......
  • python经典题目:list1=[1,2,3,4,5] 一行代码取出比4大的元素【杭州多测师】【杭州多测
    #list1=[1,2,3,4,5]#一行代码取出比4大的元素print([iforiin[1,2,3,4,5]ifi>4]) #输入一串字符串、如果有重复的字符打印第一次出现的字符、否则打印no......