首页 > 解决方案 > 循环嵌套对象

问题描述

我正在与 Jackson 合作,将 json 数据解析为 Java 中的一系列嵌套对象。

然后我需要遍历一些嵌套对象,并想知道您是否可以访问嵌套对象列表以直接循环。

目前我只能通过嵌套 for 循环来访问嵌套对象/嵌套列表。

RootNode有一个List<VisibleEntities>哪个又有一个Dto。Dto 有List<Segments>一个属性 String transfer 。

看起来有点像这样:

在此处输入图像描述

目前我通过以下方式访问它:

        for (VisibleEntities v: rootNode.visibleEntities) {
            for (Segments s: v.dto.segments) {
                if (s.transfer != null) {
                    System.out.println(s.transfer.getName());
                }
            }
       }

有没有办法循环 rootNode.visibleEntities.dto.segments 并直接打印 dto.segments.transfer (如果不为空)?

标签: javajackson

解决方案


如果您的数据结构为嵌套循环,那么您将需要遍历这两个循环。如果你想缩短它,你可以应用一些 Java8 流。

import java.util.ArrayList;

public class NestedStreamTest {

  public static void main(String[] args) {
    //Following is for example data
    var nest = new ArrayList<ArrayList<Integer>>();
    for(int i = 0; i < 10; i++) {
      var list = new ArrayList<Integer>();
      nest.add(list);
      for(int j = 0; j < 10; j++)
        if(j % 2 == 0)
          list.add(j);
        else
          list.add(null);
    }
    
    //Actual looping starts here
    nest.stream() //Loop through the nest
      .flatMap(list -> list.stream()) //Loop through each list in the nest
      .filter(value -> value != null) //Only allow values which are not null to continue
      .forEach(value -> System.out.println(value.toString())); //Print each filtered value
  }
}

推荐阅读