提问人:tisispa1 提问时间:3/24/2023 最后编辑:tisispa1 更新时间:3/25/2023 访问量:240
如何使用 java 8 从 List<Object[]> 获取数据
How to get data from List<Object[]> using java 8
问:
尝试使用 JPA 从数据库获取数据。我的数据格式是这样的[[John,Wick,New York],[Walter,White,New Mexico]]
我使用下面的代码从中获取数据,并通过迭代获取每个元素并设置到我的 dto 中,就像List<Object[]>
List<myDto>
List<Object[]> objects = query.list();
for ( Object[] obj : objects) {
System.out.println("Data 1"+obj[0]);
System.out.println("Data 2"+obj[1])
System.out.println("Data 3"+obj[2])
}
}
与其这样做,不如在Java 8中实现相同的目的?
答:
0赞
Wasima Sultana
3/24/2023
#1
List<Object[]> list = query // your list Object[] elements
List<String> transformedList = list.stream()
.map(objArray -> (String)objArray[0])
.collect(Collectors.toList());
评论
0赞
Tyler2P
3/25/2023
通过添加有关代码的作用以及它如何帮助 OP 的更多信息,可以改进您的答案。
1赞
Sachin
3/24/2023
#2
您的代码肯定会在 Java 8 编译器上编译和运行,而且也更容易理解。所以,我认为你不需要任何东西来改进它的任何内容。
但仅仅因为你要求它,这里是你可以通过添加一些与你的代码“相似”的 Java 流来编写的示例代码(不完全相同的输出)
objects.forEach(arr -> {
Arrays.stream(arr).forEach(System.out::println); // please note, it's only printing value on each line
});
评论
1赞
Zabuzard
3/25/2023
请注意,您可以使用它使此代码更加紧凑和规范化。flatMap
1赞
Zabuzard
3/25/2023
#3
索引流
使用流实现相同的输出(使用额外的文本)将非常痛苦。你最终会得到一个抓取索引的,总的来说它不会更易读,不是吗。尽管如此,这里是:"Data 123"
IntStream
query.list().forEach(objects -> {
IntStream.range(0, objects.length)
.mapToObj(i -> "Data " + (i + 1) + objects[i])
.forEach(System.out::println);
});
扁平流
但是,如果您不需要额外的文本,则可以直接平面映射,它实际上变得非常紧凑:Data 123
query.list()
.flatMap(Arrays::stream)
.forEach(System.out::println);
评论
"Data 123"
IntStream
Data 123