加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 过滤按属性区分并按日期排序的列表的好方法

发布时间:2020-12-14 16:18:15 所属栏目:Java 来源:网络整理
导读:我有很简单的事情要做,我有这样的人员名单: [{ name: John,date: 01-01-2018,attend: true},{ name: Adam,attend: false},date: 01-02-2018,{ name: JOHN,attend: false}] 这个数组的结果应该是:Adam(true),John(false) 因此,我需要返回用户的最新条目列表
我有很简单的事情要做,我有这样的人员名单:
[{
    name: John,date: 01-01-2018,attend: true
},{
    name: Adam,attend: false
},date: 01-02-2018,{
    name: JOHN,attend: false
}]

这个数组的结果应该是:Adam(true),John(false)

因此,我需要返回用户的最新条目列表,在这种情况下,约翰首先确认他正在参加,然后他改变主意并告诉他他没有参加,所以我将返回他的最后一个条目(请注意,有时它写的是JOHN有时约翰,但它是同一个人,这是一个棘手的部分)

我的问题是什么是过滤掉这种列表的最佳方法,我正在考虑应用“属性java流的唯一”,但首先需要按日期降序和名称(大写/小写)订购人员然后我需要某种方式采取最新的进入.

任何人都知道什么是最好的方法?

解决方法

您可以使用 Collectors.toMap执行相同的操作:
List<Person> finalList = new ArrayList<>(people.stream()
        .collect(Collectors.toMap(a -> a.getName().toLowerCase(),// name in lowercase as the key of the map (uniqueness)
                Function.identity(),// corresponding Person as value
                (person,person2) -> person.getDate().isAfter(person2.getDate()) ? person : person2)) // merge in case of same name based on which date is after the other
        .values()); // fetch the values

注意:上面假设最小的Person类

class Person {
    String name;
    java.time.LocalDate date;
    boolean attend;
    // getters and setters
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读