当前位置: 首页 > 知识库问答 >
问题:

无法打印java中对象类型列表中的不同值

鄢修德
2023-03-14

无法打印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();
      }
 
    }
}




共有1个答案

景育
2023-03-14

假设你的学生有名字

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雇员的。请帮忙,提前谢谢。