无法打印java中对象类型列表中的不同值。这是我当前的解析器代码,我正在检查重复值。
在下面的代码中,我试图从newList中获取唯一值。
XML-示例
<?xml version="1.0"?>
<company>
<student>
<fname>aaa</fname>
<lname>aaa</lname>
<gender>M<gender>
<Address>
<City>Auckland</City>
<Zipcode>2310`enter code here`</Zipcode>
</Address>
<student/>
<student>
<fname>abc</fname>
<lname>aaa</lname>
<gender>f</gender>
<Address>
<City>Wellington</City>
<Zipcode>2310</Zipcode>
</Address>
</student>
<student>
<fname>aaa</fname>
<lname>aaa</lname>
<gender>f</gender>
<Address>
<City>NorthIsland</City>
<Zipcode>5671</Zipcode>
</Address>
</student>
</company>
下面是学生pojo类,同样有一个地址pojo类有addrress细节,公司类有学生列表
public class Student {
private String FirstName;
private String LastName;
private String Gender;
private List<Address> address;
public Object student;
public Student() {}
public Student(String FirstName, String LastName, String Gender,List<Address> address) {
super();
this.FirstName = FirstName;
.
.
.
.
}
getters/setter
@Override
public String toString() {
return "<" + FirstName + ", " + LastName + ", " + Gender + ", " + address + ">";
}
@Override
public int hashCode() {
return Objects.hash(student);
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
student other = (student) obj;
return Objects.equals(student, other.student);
}
}
public static void main(String[] args) {
try {
List<Student> student = new ArrayList<Student>();
File file = new File("/Downloads/student.xml");
JAXBContext jaxbContext = JAXBContext.newInstance(Company.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
Student com= (Student) jaxbUnmarshaller.unmarshal(file);
List<Student> list = com.getStudent();
for(Student stu:list) {
student.add(new Student(stu.getFirstName()+" "+stu.getLastName()+" "+stu.getContactNo()+" "+stu.getGender());
}
List<Student> newList = list.stream().distinct().collect(Collectors.toList());
System.out.println(newList);
} catch (JAXBException e) {
e.printStackTrace();
}
}
}
假设你的学生有名字
public class Student {
private String name;
private String sex;
// getters & setters
@Override
public int hashCode() {
return Objects.hash(name, sex);
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Student other = (Student) obj;
return Objects.equals(name, other.name) && Objects.equals(sex, other.sex);
}
}
然后在使用list时:
Student stu= new Student();
stu.setName("A");
stu.setSex("M");
Student stu1= new Student();
stu1.setName("B");
stu1.setSex("F");
Student stu2= new Student();
stu2.setName("C");
stu2.setSex("F");
Student stu3= new Student();
stu3.setName("A");
stu3.setSex("M");
List<Student> list =new ArrayList<Student>();
System.out.println(list.stream().distinct().collect(Collectors.toList()));
将为您提供3条记录,而不是4条记录,因为一个学生对象根据等于重复。
因此,请检查您的POJO中是否存在等于的方法
问题内容: 我有一个对象 obj 和一个类名 MyClass ,我可以使用instanceof来检查obj是否为MyClass类型,或者可以说obj.getClass()。equals(“ MyClass”)。所以我想知道是否还有其他检查对象类型的方法。 问题答案: 当心:如果您的对象是的子类,或者它实现了接口(也通常是您感兴趣的-如果您回想起“ IS A” OOP概念),则也返回true。 又见
然后在main方法中,我尝试创建一个列表并打印出其中的元素。 没有语法错误,但当我尝试运行上面的代码时,终端不会返回任何内容。
问题内容: 我有一个可能具有或不具有相同属性值的对象的列表/集合。获得具有相同属性的对象的不同列表的最简单方法是什么?一种收集类型最适合此目的吗?例如,在C#中,我可以使用LINQ执行以下操作。 我最初的想法是使用lambdaj(链接文本),但似乎不支持此功能。 问题答案: 使用接口的实现(类T可能需要自定义方法,您可能必须自己实现)。通常,a 是开箱即用的:它使用和方法比较对象。对于简单的对象,
问题内容: 所以我有一堂课,叫做。 我想打印此类的对象列表,如下所示: 但是它显示了这样的输出: 实际上,我想打印每个对象的值。有什么办法吗? 问题答案: 如果只想为每个对象打印标签,则可以使用循环或列表理解: 但是要回答您的原始问题,您需要定义方法以正确获得列表输出。它可能像这样简单:
我无法打印我的数组列表对象。 下面是我的第一个返回arraylist对象的类: } 物品是:约翰 物品是:乔 但当我检索到另一个类时,它不起作用。 下面是我的第二个类来检索数组列表对象并显示它: 运行这个之后,它会打印出来:什么都没有 如果我像这样打印 System.out.println("NAME"arr.toString()); 它给了我名字:[]; 有人能解释为什么它不起作用吗(在第二节课
下面的班级是我的主要班级。我的arraylist是“Employee”类型,并且该arraylist包含多个对象的许多元素(多态性)。所以我想知道,当用户输入一个类名时,我应该从ArrayList中打印出那个特定类的employees。例如,当用户输入“Surgeon”时,程序应该能够从ArrayList中打印出所有Surgeon雇员的。请帮忙,提前谢谢。