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

如何将XML转换为集合并基于索引进行迭代?因为我需要在Java中对集合进一步执行操作

鲜于宏义
2023-03-14

我需要使用java代码过滤和聚合xml文件中具有相同值的节点。

在下面的代码中,我需要在不同的文件中汇总并编写同性学生的详细信息。

在此处输入代码

<?xml version="1.0"?>

<student> 
   <name>aaa</name>  
   <gender>M<gender> 
   <Address>
     <City>Auckland</City>
     <Zipcode>2310`enter code here`</Zipcode>
    </Address>
<student/> 
<student>  
  <name>bbb</name> 
  <gender>f</gender> 
  <Address>
     <City>Wellington</City>
     <Zipcode>2310</Zipcode>
    </Address>

</student> 
<student>  
  <name>ccc</name>  
  <gender>f</gender>
  <Address>
     <City>NorthIsland</City>
     <Zipcode>5671</Zipcode>
    </Address>
</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);
            
        //  ArrayList<Student> list=(ArrayList<Student>) com.getStudent();
            List<Student> list = com.getStudent();
            for(Student stu:list) {
    
            student.add(new Student(stu.getFirstName()+" "+stu.getLastName()+" "+stu.getContactNo()+" "+stu.getGender()+" "+stu.getGender());
            }


        List<Employee> newList = list.stream().distinct().collect(Collectors.toList());

输出

John Green 1234567890 m

需要检查不同的记录。这不是打印不同的值。

List<Student> newList = list.stream().distinct().collect(Collectors.toList());

共有1个答案

文德曜
2023-03-14

嗯,根据评论

public static void main(String[] args) {
           
     try {
 
        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();
        list.stream().forEach(stu->{
         if(stu.getGender().equalsIgnoreCase("M")){
          //write to file where Male gender details can be stored.
           
          }
         else {
          //write to file where Male gender details can be stored.
         }
         });
        
        }
     }}

在这里,您可以获得流

请注意,您可以在主文件的开头声明您的文件。

编辑:由于您正在寻找多级分组,下面是我的建议:

Map<String, Map<String, List<Student>>> map = list.stream()
            .collect(Collectors.groupingBy(x -> x.getGender(), Collectors.groupingBy(y -> y.getAddress().getZipCode())));

该地图包含基于性别和zip的数据聚合。迭代此地图

 类似资料:
  • 是否可以在java中并行地迭代一个集合。我正在中寻找类似C#的东西-命名空间

  • 问题内容: 问题 与新HashSet(Collection)等效的Scala)相关,如何将Java集合(例如)转换为Scala集合? 我实际上是在尝试将Java API调用转换为Spring的 (返回a )成Scala不可变。因此,例如: 这似乎有效。欢迎批评! 问题答案: 您的最后一条建议有效,但您也可以避免使用: 请注意,默认情况下,由于提供了此功能。

  • 问题内容: 我希望能够在迭代过程中从集合中删除多个元素。最初,我希望迭代器足够聪明,以使下面的幼稚解决方案能够正常工作。 但这会引发一个错误。 请注意,就我所知,iterator.remove()无法正常工作,因为我需要一次删除多个内容。还假设不可能确定“即时”删除哪些元素,但是可以编写该方法。在我的特定情况下,要确定要在迭代过程中删除的内容,将占用大量内存和处理时间。由于内存限制,也无法制作副本

  • 问题内容: 我有一个列表需要自定义排序,然后转换为其ID与名称映射的映射。 这是我的代码: 我认为这可以完成工作,但是我想知道是否可以避免在此处创建并使用精美的函数式编程来一次完成工作。 问题答案: 为此,您有: 如果要强制实例化Map实现,请使用以下命令:

  • 我正在为一个类编写一个单元测试,如下所示: 现在,当我运行这段代码时,它给我一个错误,即我无法将强制转换为Java中的集合。 ps:有一个单独的类,名为,它的setter如下所示: 而我正在尝试使用上面的这种方法。

  • Set似乎是一种创建具有保证唯一元素的数组的好方法,但它不提供任何获取属性的好方法,除了generator[Set].values,它以的尴尬方式调用。 如果您可以在集合上调用和类似的函数,那么这是可以的。但你也不能那样做。 我尝试过,但似乎只转换了类数组(NodeList和TypedArrays?)对象设置为数组。再试一次:对Sets不起作用,set.prototype没有类似的静态方法。 那么