如何使用 java 8 从 List<Object[]> 获取数据

How to get data from List<Object[]> using java 8

提问人:tisispa1 提问时间:3/24/2023 最后编辑:tisispa1 更新时间:3/25/2023 访问量:240

问:

尝试使用 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中实现相同的目的?

对象 数组列出 java-8

评论

3赞 Unmitigated 3/24/2023
你现在的代码怎么不是 Java 8?
0赞 Slaw 3/24/2023
为什么你认为有什么需要改变的?您认为 Java 8 中是否有特定的特性可以“简化”当前的实现?你为什么这么认为?
0赞 tisispa1 3/24/2023
@Unmitigated我没有使用任何 java 8 函数式编程方法,这里使用的是外部迭代器,例如 forEach 循环
0赞 Zabuzard 3/25/2023
使用流实现相同的输出(使用该打印件)将非常痛苦。你最终会得到一个抓取索引的,总的来说它不会更易读,不是吗。如果您不需要额外的文本,您可以平面映射。"Data 123"IntStreamData 123

答:

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);