如何将List<Object[]>转换为Stream<Object>?

5
我有一个本地查询,返回一个List<Object[]>。 我想将这个List转换为Stream<Object>。 这些对象来自我的数据库中的不同表的不同列。
最佳解决方案是什么? 创建一个DTO并将List<DTO>转换为Stream<DTO>?我该怎么做?

1
我认为你应该澄清你的问题。你得到的两个答案做了不同的事情?你不能说J-Alex的解决方案有效,同时接受另一种实际上做了其他事情的解决方案。 - GhostCat
2个回答

11
假设您的 DTO 类具有适当的构造函数,您可以编写以下内容:
List<Object[]> input = ...
Stream<DTO> dtos = input.stream().map(arr -> new DTO(arr[0], arr[1], ... , arr[n]);

5
老实说,我从你的回答中理解了问题。 - J-Alex
我还是不明白。我有点想知道:那是假定所有数组都有相同数量的元素吗? - GhostCat
@GhostCat,那就是我所假设的。 - Eran
它提供的是DTO流,而不是Op所要求的每个数组中的每个对象的Stream<Object>。尽管您的解决方案也很好,但我们需要一个中间对象来携带这些对象。 - Vinay Prajapati
我同意@J-Alex的观点。 - Vishwa Ratna

10

使用 flatMap:

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

起初我也认为这就是 OP 想要的,但在再次阅读问题后,我认为 OP 想要从每个数组创建某个类的实例。 - Eran

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接