如何将两个List <object []>对象组合成一个List <object []> </object []> </object []>

时间:2015-01-12 13:31:13

标签: java list

我有两个List<Object[]>个。

第一个元素包含{1, 'a'}, {2, 'd'}等元素...... Object[]此处的Object始终是两个Integer s(Character的数组, {1, 12.0}, {2, 14.0})。

第二个有Object[]等。Object这里是两个Integer的数组DoubleInteger )。

第一个列表中的

Integer与第二个列表中的e完全相同。我的意思是,对于第一个列表中的任何列表元素ee,第二个列表中都有一个元素e[0] == ee[0]List<Object[]>。反之亦然。

我需要从两个List<Object[]>构建一个List<Object[]>,以便{1, 'a', 12.0}, {2, 'd', 14.0}必须包含apache commons等元素......

我该怎么做?

也许有来自google guavacriteria.list()图书馆的即时解决方案?

一个小小的注释:这些列表由hibernate中的{{1}}方法返回。

2 个答案:

答案 0 :(得分:3)

这样的事情应该有效

Map<Integer, Character> map1 = new HashMap<Integer, Character>();
for (Object[] o : list1) {
    map1.put((Integer)o[0], (Character)o[1]);
}

Map<Integer, Double> map2 = new HashMap<Integer, Double>();
for (Object[] o : list2) {
    map2.put((Integer)o[0], (Double)o[1]);
}

List<Object[]> list3 = new ArrayList<Object[]>();
for (int i = 0; i < list1.size(); i++) {
    list3.add(new Object[] { i, map1.get(i), map2.get(i) })
}

答案 1 :(得分:2)

在任何解决方案中,我首先会创建第二个列表的地图,并在迭代第一个列表时查看它。

在java 8中,它相当整洁(2行):

final Map<Integer, Double> map = list2.stream().collect(Collectors.groupingBy(a -> a[0], a -> a[1]));
List<Object[]> result = list1.stream()
    .map(a -> new Object{a[0], a[1], map.get(a[0])})
    .collect(Collectors.toList());

注意:代码未经过测试且未使用IDE(在手机上翻阅),因此可能存在错误。