java - 有可能这样做吗?
问题描述
我有一个嵌套类的列表。我可以使用流来遍历它们吗?当条件为真时,我需要打印所有值。
输入:列出 ObjDS;
我们可以使用流来遍历而不是使用循环或迭代器,并且当每个 Obj4 的 d1 + d2 等于某个数字(比如 10)时,然后打印 a1,a2,b1,b2,c1,c2,d1,d2 的层次结构。
有可能与流有关吗?
public class ObjA {
int a1;
int a2;
}
public class ObjB {
int b1;
int b2;
List<ObjA> objAS;
}
public class ObjC {
int c1;
int c2;
List<ObjB> objBS;
}
public class ObjD {
int d1;
int d2;
List<ObjC> objCS;
}
解决方案
当然,这是可能的。
注意:我从您的问题中了解到的是,您想要打印 ObjD 对象中所有对象的所有字段,其中 ObjD.d1 + ObjD.d2 等于某个特定的总和。我希望我正确理解了您的查询。
使用 Streams API 中的 filter 方法实际上很容易实现这一点。
代码将如下所示:
int sum = 10;
objDS.stream()
.filter(objD -> objD.d1 + objD.d2 == sum)
.forEach(objD -> {
List<ObjC> objCS = objD.objCS;
objCS.forEach(objC -> {
List<ObjB> objBS = objC.objBS;
objBS.forEach(objB -> {
List<ObjA> objAS = objB.objAS;
objAS.forEach(objA -> {
System.out.println("ObjA.a1: " + objA.a1);
System.out.println("ObjA.a2: " + objA.a2);
});
System.out.println("ObjB.b1: " + objB.b1);
System.out.println("ObjB.b2: " + objB.b2);
});
System.out.println("ObjC.c1: " + objC.c1);
System.out.println("ObjC.c1: " + objC.c1);
});
System.out.println("ObjD.d1: " + objD.d1);
System.out.println("ObjD.d2: " + objD.d2);
});
在这里,我使用 sum 变量来检查您提到的条件。一旦过滤了 ObjD 列表,我们就只有 ObjD.d1 + ObjD.d2 等于 sum 的对象。
此外,我们可以简单地使用 forEach() 方法遍历每个列表,并根据您的喜好以您想要的任何顺序打印变量。
在这里,我首先打印最里面的 ObjAS 列表,然后是 ObjBS、ObjCS 和 ObjDS。
您可以根据您的要求更改订单。
推荐阅读
- sql-server - 如何在 sql-server 中生成包含一些默认字符和一些数字的增量字符串
- android - JSON 异常(在执行后不起作用)
- postgresql - 对于大型数据集,在 Postgres 中,JOINS 是否比使用 JSONB 更好,反之亦然?
- css - 如何取消显示:无;
- c++ - c++ 包含
在 linux 中,gcc 会引发发生在 ? - javascript - Laravel ReactJs:更改我的 js(reactjs) 文件后未反映更改
- react-native - 使用 React Native 上传文件并在通知栏中显示确定的进度条
- python - 假定一个值作为初始值,在循环中更新它的值
- python - 带有嵌套 if 语句的 While 循环;消除多次打印并退出循环
- hyperledger-fabric - 如何确保所有组织都签署了要安装的链码?