Java 按索引将数组中的元素分组到列表中<;地图<;字符串,对象>&燃气轮机;

Java 按索引将数组中的元素分组到列表中<;地图<;字符串,对象>&燃气轮机;,java,collections,java-8,java-stream,Java,Collections,Java 8,Java Stream,我有一个映射,其中键是数组的名称对象标识符(也称为集合名称)及其对应的对象数组 目标是能够将对象[]的不同条目合并到一个列表中,其中每个映射的键对应于已知集合名称,对象是每个数组的第i个值 为了进一步澄清这一点: 假设我们有一个包含以下数组的映射 Map<String, Object[]> map = new HasMap<>(); Object[] ints = Stream.of(1,2,3,4,5).toArray(); Object[]

我有一个映射,其中键是数组的名称对象标识符(也称为集合名称)及其对应的对象数组

目标是能够将对象[]的不同条目合并到一个列表中,其中每个映射的键对应于已知集合名称,对象是每个数组的第i个值

为了进一步澄清这一点:

假设我们有一个包含以下数组的映射

    Map<String, Object[]> map = new HasMap<>();

    Object[] ints = Stream.of(1,2,3,4,5).toArray();
    Object[] dobules = Stream.of(1.0,2.0,3.0,4.0,5.0).toArray();
    Object[] strings = Stream.of("a","b","c","d","e").toArray();

    map.put("ints", ints);
    map.put("doubles", dobules);
    map.put("strings", strings);

我正在寻找一个使用java收集流的解决方案 非常感谢您

简单的老方法:

List result=new ArrayList();
如果(!map.isEmpty())
//假设所有数组长度都相同
int length=map.values().iterator().next().length;
for(int i=0;i

混合方法:

int length=map.values().iterator().next().length;
for(int i=0;ie.getValue()[index]));
}

纯功能方法:

int length=map.isEmpty()?0:map.values().iterator().next().length;
列表结果=
IntStream.range(0,长度)
.boxed()
.map(i->map.entrySet()
.stream()
.collect(toMap(Map.Entry::getKey,e->e.getValue()[i]))
.collect(toList());

在第二个示例中,您可以使用
IntStream
而不是for循环。然后,您还应该能够将所有内容收集到
列表中
@BenjaminM。这正是我要搜索的。我原以为我应该使用平面图,但没有找到正确的方法。似乎使用IntStream才是正确的方法。谢谢太多了!我投票决定结束这个问题,因为这就像是一个家庭作业问题。我相信他们用streams尝试了什么和什么不起作用的例子会更有可能得到帮助。
{"ints": 1, "doubles":1.0, "strings":"a"},
{"ints": 2, "doubles":2.0, "strings":"b"},
{"ints": 3, "doubles":3.0, "strings":"c"},
{"ints": 4, "doubles":4.0, "strings":"d"},
{"ints": 5, "doubles":5.0, "strings":"e"}