【问题标题】:How to convert a List<Object[]> to Stream<Object>如何将 List<Object[]> 转换为 Stream<Object>
【发布时间】:2019-01-23 08:34:04
【问题描述】:

我有一个返回 List&lt;Object[]&gt; 的本机查询。 我想将此List 转换为Stream&lt;Object&gt;。 这些对象是来自我数据库不同表的不同列。

最好的解决方案是什么?

创建一个 DTO 并将 List&lt;DTO&gt; 转换为 Stream&lt;DTO&gt;?我该怎么做?

【问题讨论】:

  • 我认为你真的应该澄清你的问题。你得到的两个答案做了不同的事情?你不能说 J-Alex 的解决方案是有效的,也不能接受实际上做其他事情的东西。

标签: java spring java-8 java-stream


【解决方案1】:

假设你的 DTO 类有一个合适的构造函数,你可以这样写:

List<Object[]> input = ...
Stream<DTO> dtos = input.stream().map(arr -> new DTO(arr[0], arr[1], ... , arr[n]);

【讨论】:

  • 说实话,我从你的回答中理解了这个问题。
  • 我还是不明白。我有点想知道:假设所有数组都具有相同数量的元素?
  • @GhostCat 这就是我的假设。
  • 它给出的是 DTO 流而不是 Stream 其中 Object 是 Op 要求的列表中每个数组中的每个对象。尽管您的解决方案也很好,因为我们需要一个中间对象来承载这些对象。
  • 我同意@J-Alex
【解决方案2】:

使用flatMap

List<Object[]> objectsList = new ArrayList<>();
Stream<Object> objectStream = objectsList.stream()
        .flatMap(Arrays::stream);

【讨论】:

  • 最初我也认为这就是 OP 想要的,但在再次阅读问题后,我认为 OP 想从每个数组中创建某个类的实例。
猜你喜欢
  • 1970-01-01
  • 2017-04-07
  • 2023-03-08
  • 2020-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-20
相关资源
最近更新 更多