Java 如何从对象列表中删除重复元素
如何从图书列表中删除重复元素,其中作者和语言相同,但标题不同 在这种情况下,我想删除任意两个位置(因为它们具有相同的作者和语言): 我想删除任何一个位置(因为他们有相同的作者和语言): 图书类别:Java 如何从对象列表中删除重复元素,java,Java,如何从图书列表中删除重复元素,其中作者和语言相同,但标题不同 在这种情况下,我想删除任意两个位置(因为它们具有相同的作者和语言): 我想删除任何一个位置(因为他们有相同的作者和语言): 图书类别: public class Book { private String author; private String language; private String title; public Book(String author, String langua
public class Book {
private String author;
private String language;
private String title;
public Book(String author, String language, String title) {
this.author = author;
this.language = language;
this.title = title;
}
public void setTitle(String title) {
this.title = title;
}
public String getTitle() {
return this.title;
}
public void setLanguage(String language) {
this.language = language;
}
public String getLanguage() {
return this.language;
}
public void setAuthor(String author) {
this.author = author;
}
public String getAuthor() {
return this.author;
}
}
Main.class:
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Book> books = new ArrayList<Book>();
books.add(new Book("Hemigway","english","Old man"));
books.add(new Book("Willis","english","Black and white"));
books.add(new Book("Hemigway","english","Lord of the ring"));
books.add(new Book("Harper Lee","english","Mockingbird"));
books.add(new Book("Fitzgerald","english","The catcher"));
books.add(new Book("Hemigway","english","Border life"));
books.add(new Book("Harper Lee","english","Other books"));
for(Book book : books) {
System.out.println(book.getAuthor() + " : "+book.getLanguage()+" : "+book.getTitle());
}
}
}
import java.util.ArrayList;
导入java.util.List;
公共班机{
公共静态void main(字符串[]args){
List books=new ArrayList();
新增(新书(“海米威”、“英语”、“老人”);
新增(新书(“威利斯”、“英语”、“黑白”);
新增(新书(“海米威”、“英语”、“魔戒”);
新增(新书(“哈珀·李”、“英语”、“模仿鸟”);
新增(新书(“菲茨杰拉德”、“英语”、“捕手”);
增加(新书(“海米威”、“英语”、“边境生活”);
增加(新书(“哈珀·李”、“英语”、“其他书”);
用于(书籍:书籍){
System.out.println(book.getAuthor()+”:“+book.getLanguage()+”:“+book.getTitle());
}
}
}
您应该使用两个概念
import java.util.HashSet;
import java.util.Objects;
import java.util.Set;
public class Main {
public static void main(String[] args) {
Set<Book> books = new HashSet<>();
books.add(new Book("Hemigway","english","Old man"));
books.add(new Book("Willis","english","Black and white"));
books.add(new Book("Hemigway","english","Lord of the ring"));
books.add(new Book("Harper Lee","english","Mockingbird"));
books.add(new Book("Fitzgerald","english","The catcher"));
books.add(new Book("Hemigway","english","Border life"));
books.add(new Book("Harper Lee","english","Other books"));
for(Book book : books) {
System.out.println(book.getAuthor() + " : "+book.getLanguage()+" : "+book.getTitle());
}
}
}
以下是输出:
Harper Lee : english : Mockingbird
Fitzgerald : english : The catcher
Hemigway : english : Old man
Willis : english : Black and white
您只需使用
equals
和hashcode
以及stream
和distinct
方法即可实现这一点
更改Books类以包括以下方法
class Book {
/*
* your already written code here. Add following in addition to your code
* */
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Book book = (Book) o;
return author.equalsIgnoreCase(book.author) && language.equalsIgnoreCase(book.language);
}
@Override
public int hashCode() {
return Objects.hash(author, language);
}
}
现在将main方法更改为具有不同对象的新列表
public static void main(String[] args) {
/*
* your already written code here. Add following in addition to your code
* */
List<Book> newBooks = books.stream().distinct().collect(Collectors.toList());
for (Book book : newBooks)
System.out.println(book.getAuthor() + " : " + book.getLanguage() + " : " + book.getTitle());
}
publicstaticvoidmain(字符串[]args){
/*
*您已经在此处编写了代码。除了代码之外,还添加以下内容
* */
List newBooks=books.stream().distinct().collect(Collectors.toList());
用于(书籍:新书)
System.out.println(book.getAuthor()+”:“+book.getLanguage()+”:“+book.getTitle());
}
但是如果它有不同的标题。。。你为什么认为是复制品?@Jordy我想他想说的是过滤掉那些相似的东西
Harper Lee : english : Mockingbird
Fitzgerald : english : The catcher
Hemigway : english : Old man
Willis : english : Black and white
class Book {
/*
* your already written code here. Add following in addition to your code
* */
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Book book = (Book) o;
return author.equalsIgnoreCase(book.author) && language.equalsIgnoreCase(book.language);
}
@Override
public int hashCode() {
return Objects.hash(author, language);
}
}
public static void main(String[] args) {
/*
* your already written code here. Add following in addition to your code
* */
List<Book> newBooks = books.stream().distinct().collect(Collectors.toList());
for (Book book : newBooks)
System.out.println(book.getAuthor() + " : " + book.getLanguage() + " : " + book.getTitle());
}