如何解决按名称比较两个对象列表并获得不同对象的列表
我有一些对象标签
public class Tag {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
return this;
}
}
并且有两个列表 List<Tag> firstList
和 List<Tag> secondList
我必须仅按名称比较它们并创建 thirdList
,它将包含来自 firstList
的唯一对象。
我怎样才能通过流来做到这一点?
解决方案:
List<Tag> thirdList = firstList.stream()
.filter(f -> secondList.stream()
.noneMatch(t -> t.getName().equals(f.getName())))
.collect(Collectors.toList());
解决方法
你可以这样做:
List<Tag> a = List.of(new Tag(1,"tag1"),new Tag(2,"tag2"));
List<Tag> b = List.of(new Tag(1,new Tag(3,"tag3"),new Tag(4,"tag4"));
Set<Tag> collect = a.stream()
.filter(x -> !b.contains(x))
.collect(Collectors.toSet());
System.out.println(collect);
并且必须为标签实现equals和hashCode:
class Tag {
private int id;
private String name;
public Tag(int id,String name) {
this.id = id;
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Tag tag = (Tag) o;
return Objects.equals(name,tag.name);
}
@Override
public int hashCode() {
return Objects.hash(name);
}
@Override
public String toString() {
return "Tag{" +
"id=" + id +
",name='" + name + '\'' +
'}';
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。