使用条件java删除重复的列表对象
我有数组列表对象,但如果一天内有重复的id,我想过滤并删除数据 这是我的密码使用条件java删除重复的列表对象,java,list,object,Java,List,Object,我有数组列表对象,但如果一天内有重复的id,我想过滤并删除数据 这是我的密码 public static void main(String[] args) { ArrayList<UniqueCompletedChat> al = new ArrayList<UniqueCompletedChat>(); al.add(new UniqueCompletedChat("2015-11-01", "D01")); al.ad
public static void main(String[] args) {
ArrayList<UniqueCompletedChat> al = new ArrayList<UniqueCompletedChat>();
al.add(new UniqueCompletedChat("2015-11-01", "D01"));
al.add(new UniqueCompletedChat("2015-11-01", "D01"));
al.add(new UniqueCompletedChat("2015-11-01", "D02"));
al.add(new UniqueCompletedChat("2015-11-01", "D01"));
al.add(new UniqueCompletedChat("2015-11-02", "D01"));
al.add(new UniqueCompletedChat("2015-11-02", "D02"));
al.add(new UniqueCompletedChat("2015-11-02", "D03"));
al.add(new UniqueCompletedChat("2015-11-02", "D02"));
al.add(new UniqueCompletedChat("2015-11-02", "D02"));
al.add(new UniqueCompletedChat("2015-11-03", "D01"));
List<UniqueCompletedChat> result = new ArrayList<UniqueCompletedChat>();
Set<String> titles = new HashSet<String>();
for (UniqueCompletedChat u : al) {
if (titles.add(u.getIdDoctor()) || titles.add(u.getDate())) {
result.add(u);
}
}
for(UniqueCompletedChat u : result){
System.out.print(u.getDate() + " || ");
System.out.print(u.getIdDoctor());
System.out.println("");
}
}
class UniqueCompletedChat {
private String date;
private String idDoctor;
public UniqueCompletedChat(String date, String idDoctor) {
this.date = date;
this.idDoctor = idDoctor;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public String getIdDoctor() {
return idDoctor;
}
public void setIdDoctor(String idDoctor) {
this.idDoctor = idDoctor;
}
}
publicstaticvoidmain(字符串[]args){
ArrayList al=新的ArrayList();
新增(新的UniqueCompletedChat(“2015-11-01”、“D01”);
新增(新的UniqueCompletedChat(“2015-11-01”、“D01”);
新增(新的UniqueCompletedChat(“2015-11-01”、“D02”);
新增(新的UniqueCompletedChat(“2015-11-01”、“D01”);
新增(新的UniqueCompletedChat(“2015-11-02”,“D01”);
新增(新的UniqueCompletedChat(“2015-11-02”,“D02”);
新增(新的UniqueCompletedChat(“2015-11-02”,“D03”);
新增(新的UniqueCompletedChat(“2015-11-02”,“D02”);
新增(新的UniqueCompletedChat(“2015-11-02”,“D02”);
新增(新的UniqueCompletedChat(“2015-11-03”,“D01”);
列表结果=新建ArrayList();
Set titles=new HashSet();
用于(唯一完整聊天u:al){
if(titles.add(u.getIdDoctor())| | titles.add(u.getDate())){
结果:添加(u);
}
}
对于(UniqueCompletedChat u:结果){
System.out.print(u.getDate()+“| |”);
System.out.print(u.getIdDoctor());
System.out.println(“”);
}
}
类UniqueCompletedChat{
私有字符串日期;
私人医生;
公共UniqueCompletedChat(字符串日期,字符串ID医生){
this.date=日期;
this.idDoctor=idDoctor;
}
公共字符串getDate(){
返回日期;
}
公共无效设置日期(字符串日期){
this.date=日期;
}
公共字符串getIdDoctor(){
返回idDoctor;
}
公共void setIdDoctor(字符串idDoctor){
this.idDoctor=idDoctor;
}
}
这是我的代码的输出
我的目标期望结果
如何达到我的期望?有什么方法可以优雅地解决这个问题吗?我看到两种选择:
事情是这样的:在字符串上推来推去可能看起来既方便又容易;但这与良好的OO设计正好相反。你知道,如果你不在乎使用Javas类型的系统;您也可以退一步,用动态语言而不是Java来做任何事情。我认为错误来自以下位置:
if (titles.add(u.getIdDoctor()) || titles.add(u.getDate())) {
result.add(u);
}
尝试按如下方式组合并检查:
if (titles.add(u.getIdDoctor() + u.getDate())) {
result.add(u);
}
当然,您可以使用StringBuilder以获得更好的性能。我认为错误来自以下位置:
if (titles.add(u.getIdDoctor()) || titles.add(u.getDate())) {
result.add(u);
}
尝试按如下方式组合并检查:
if (titles.add(u.getIdDoctor() + u.getDate())) {
result.add(u);
}
当然,您可以使用StringBuilder获得更好的性能。如果您使用的是java 8
Collection<UniqueCompletedChat> result = al.stream()
.<Map<String, UniqueCompletedChat>>collect(HashMap::new, (k, uc) -> k.put(uc.getKey(), uc), Map::putAll)
印刷品:
2015-11-02 || D02
2015-11-01 || D02
2015-11-02 || D03
2015-11-03 || D01
2015-11-02 || D01
2015-11-01 || D01
如果您使用的是Java8
Collection<UniqueCompletedChat> result = al.stream()
.<Map<String, UniqueCompletedChat>>collect(HashMap::new, (k, uc) -> k.put(uc.getKey(), uc), Map::putAll)
印刷品:
2015-11-02 || D02
2015-11-01 || D02
2015-11-02 || D03
2015-11-03 || D01
2015-11-02 || D01
2015-11-01 || D01
如果使用java 7如何实现它?如果使用java 7如何实现它?java只有两种处理日期-时间处理的方法:(a)麻烦、混乱和有缺陷的旧方法(java.util.date、java.util.Calendar、java.text.SimpleDataFormat等)和(b)java.time类中的现代干净、强大的方法。避免任何不在java.time包中的日期时间类。java只有两种方法来处理日期时间处理:(a)麻烦、混乱且有缺陷的旧方法(java.util.date、java.util.Calendar、java.text.simpleDataFormat等)和(b)java.time类中现代的干净、强大的方法。避免任何不在java.time包中的日期时间类。