首页 > 编程语言 >java列表对象,多属性去重

java列表对象,多属性去重

时间:2023-08-11 14:24:44浏览次数:39  
标签:SysUserRole sysUserRole1 java sysUserRole userRoleList 列表 static new 属性

demo

public class OTest {
    static Map<Object, Boolean> seen = new ConcurrentHashMap<>(16);
    public static void main(String[] args) {
        List<SysUserRole> userRoleList = new ArrayList<>();
        SysUserRole sysUserRole = new SysUserRole();
        sysUserRole.setUserId("1");
        sysUserRole.setRoleId(2L);
        userRoleList.add(sysUserRole);
        SysUserRole sysUserRole1 = new SysUserRole();
        sysUserRole1.setUserId("1");
        sysUserRole1.setRoleId(2L);
        userRoleList.add(sysUserRole1);
        
        // 函数去重
        List<SysUserRole> a = userRoleList.stream().filter(distinctByKey(k -> k.getUserId() + ";" + k.getRoleId().toString())).collect(Collectors.toList());

        System.out.println(JSON.toJSONString(a));

        // 比较去重
        userRoleList = userRoleList.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(o -> o.getUserId() + ";" + o.getRoleId()))), ArrayList::new));

        System.out.println(JSON.toJSONString(userRoleList));
    }


    public static <T> Predicate<T> distinctByKey(Function<? super T, ?> keyExtractor) {
        return t -> seen.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null;
    }
}

标签:SysUserRole,sysUserRole1,java,sysUserRole,userRoleList,列表,static,new,属性
From: https://www.cnblogs.com/stubborn-dude/p/17622843.html

相关文章

  • 利用Java实现键盘输入
    利用Java实现键盘输入引入包下的类Scanner创建一个对象调用对象的方法importjava.util.Scanner;//导包publicclassinput{ publicstaticvoidmain(String[]args){ /*键盘输入*/ Scannerinput=newScanner(System.in); System.out.println("请输入用户......
  • 【Java 初阶】 Mysql 增删改查
    ......
  • java heap space解决方法
    在JVM中如果98%的时间是用于GC(Garbage Collection)且可用的Heapsize不足2%的时候将抛出异常信息,java.lang.OutOfMemoryError:Javaheapspace。所以产生这个异样的原因通常有两种:1.程序中出现了死循环2.程序占用内存太多,超过了JVM堆设置的最大值。对于第一种情况,需要自己查看......
  • Python打印类的属性
    一、使用__dict__打印类的属性classPerson:def__init__(self,name,age):self.name=nameself.age=ageperson=Person("Tom",18)print(person.__dict__)使用__dict__方法可以直接打印出类的属性及其对应的值。上述代码中,我们首先定义了一个Pe......
  • javascript 数组(array) 常用的方法集锦(上)
    由于三大框架的出现,对DOM的操作转成对数据的操作,对数据的操作主要体现在数组和对象上,今天就以数组为例,对数组的各种操作进行总结欢迎访问幸福拾荒者,一个前端知识总结分享平台,与大家一起共同成长共同进步!......
  • Selenium Web 自动化 - Selenium(Java)环境搭建 (new)
    SeleniumWeb自动化-Selenium(Java)环境搭建(new)2023-08-110背景开发工具idea代码管理mavenjdk1.8webdriverchrome1chromedriver&chromechromedriver和chrome要对应上:chomedriver下载地址:淘宝镜像 这里用的是 chromedriver88-0-4324-96.zipchrome下载地址:......
  • JAVA | 如何安装JDK并配置
    安装JDK首先去Oracle官网。(网址随时会变,自行百度其官网就可以)点击产品->java。点击DownloadJavanow.我们可以下载JDK20、JDK17、下面还可以下载JDK8和JDK11.我们点击自己对应的操作系统下载,下载的时候需要一个Oracle账户,自己注册一下即可。下载完毕:双击安装:下一步。......
  • java 字符串中的编码和解码问题
     ......
  • java 字符流-编码
            ......
  • 鹏业安装算量软件_模型界面增加属性表
    鹏业安装算量软件8月在线培训继续进行培训时间下午时段:周一、三、五(15:00-16:00)晚上时段:周二、四(19:30-20:30)培训内容周一:消防喷淋周二:消火栓、给排水周三:通风空调(空调水、空调风)周四:桥架电缆消防电周五:照明插座综合布线培训频道链接:https://wx.vzan.com/live/pc/channel-detail......