java - Java 8基于多个条件和日期对对象的Arraylist进行排序
问题描述
我有一个对象关系列表,其中有一个名为 Contact 的对象,它将包含 elecType 对象或 postType
**Relationships:**
Relationship:
date :15/10/20
Contact :
code : 1
usageCode : 1
elecType(object) :(ecode : 1, detail : ssss )
Relationship:
date :14/10/20
Contact :
code : 1
usageCode : 2
elecType(object) :(ecode : 2, detail :yyy )
Relationship:
date :10/10/20
Contact :
code : 1
usageCode : 2
elecType(object) :(ecode : 2, detail :eee )
Relationship:
date :13/10/20
Contact :
code : 1
usageCode : 2
elecType(object) :(ecode : 1, detail :zzz )
Relationship:
date :15/10/20
Contact :
code : 1
usageCode : 1
elecType(object) :(ecode : 2, detail :ttt )
Relationship:
date:12/10/20
Contact :
code : 1
postType(object) : ( detail :xxx )
Relationship:
date:11/10/20
Contact :
code : 2
postType(object) : (detail :yyy )
Relationship:
date:13/10/20
Contact :
code : 2
postType(object) : (detail :zzz )
如果代码为 2,我需要根据以下条件对关系、联系人对象进行排序,我需要从每个具有不同代码的联系人中获取最新日期的关系对象,即:这将是上述示例的最终输出
Relationship:
date:12/10/20
Contact :
code : 1
postType(object) : (detail :xxx )
Relationship:
date:13/10/20
Contact :
code : 2
postType(object) : (detail :zzz )
同样,如果代码为 1,我需要从每个具有不同 usageCode、ecode 的联系人记录中获取最新的日期关系
即:根据上述数据,输出将是
Relationship:
date :15/10/20
Contact :
code : 1
usageCode : 1
elecType(object) :(ecode : 1, detail : ssss )
Relationship:
date :15/10/20
Contact :
code : 1
usageCode : 1
elecType(object) :(ecode : 2, detail :ttt )
Relationship:
date :13/10/20
Contact :
code : 1
usageCode : 2
elecType(object) :(ecode : 1, detail :zzz )
Relationship:
date :14/10/20
Contact :
code : 1
usageCode : 2
elecType(object) :(ecode : 2, detail :yyy )
Java 类
public class Relationship {
private Date date;
private Contact contact;
}
public class Contact{
private Integer code;
private Integer usageCode;
private PostalType postalType;
private ElecType elecType;
}
public class PostalType{
private String detail;
}
public class ElecType{
private String detail;
private Integer eCode
}
在 Java 8 或更高版本中实现这一点的最佳方法是什么(是否可以使用 lambda 和流来实现)
解决方案
您可以在您的类关系中实现 Comparable 并对列表进行排序
Collections.sort(testList);
如果要过滤列表,可以使用带有过滤器的流。
// filters a List with relationships with code 1
relationships.stream().filter(r -> r.getContacts().getCode() == 1).collect(Collectors.asList());
推荐阅读
- java - Java 8:比较 Arraylist 中的元素
- c++ - 复制构造函数 C++ 中自定义类的动态数组
- bash - 在文件名上附加创建日期
- qt - QML连接Mac区别
- jquery - 如何将自定义 jQuery 插件添加到 MS Outlook 2010?
- android - 在文档参考上使用 set()、update()、delete() 时,Firestore WriteBatch 无法执行
- java - 检查在android前台运行的特定包名
- php - PHP过滤MySQL语句
- json - Asp.net Web API http 响应数据大小
- visual-studio - 在线将项目导入 Visual Studio