如何在java中一次合并两个java对象列表

时间:2015-10-08 11:13:56

标签: java

我们正在使用2种不同的服务。 设备名称存储在A服务的redis上。 设备值存储在B服务的mysql上。

我想,我可以在B服务的mysql上创建设备列表。 我可以使用redis api立即获取设备名称列表。

但是如何一次合并这两种列表对象呢? 我想避免同时或为了避免性能问题。

我使用的是JDK7。

由于

=====================================

我的问题是如何合并两个对象,而不是列表。

Class Device {
    Integer id;
    String deviceName;
    List deviceValues;
}

我可以在Mysql上获取id和devicesValues。 我可以从redis获取deviceName

如果我在对象下面如何合并它?

List<Device> devices = getFromMysql(); //deviceName is null
List<String> deviceNames = getFromRedis();

如何合并设备&amp; devicenames?

3 个答案:

答案 0 :(得分:1)

[.ViewWidthSizable, .ViewHeightSizable]

其他选项:

 List<String> newList = new ArrayList<String>();
 newList.addAll(listOne);
 newList.addAll(listTwo);

其中listOne是第一个列表,listTwo是第二个列表。您可以根据自己的要求使用任何类型,而不是String类型。

答案 1 :(得分:0)

如果您使用的是Apachecommon,那么

ListUtils.union(list1,list2);

您还可以查找Iterables.concat( .. )

  

将多个iterables组合成一个iterable。归来了   iterable有一个遍历每个iterable元素的迭代器   投入。必要时不会轮询输入迭代器。该   返回iterable的迭代器支持remove()时的对应   输入迭代器支持它。

答案 2 :(得分:0)

你要求合并,我理解这意味着如果一个元素对两个列表都是通用的,那么结果列表应该只有一次。
集合是一种很好的方法。

 Set<String> set = new HashSet<>( (listOne.size()+listTwo.size()) * 2 );
 set.addAll(listOne);
 set.addAll(listTwo);
 List<String> newList = new ArrayList<>();
 newList.addAll( set );

另请注意,虽然您希望避免forwhile这是不可能的。此代码和任何其他代码仅隐藏它们。 addAll的实施将以这种或那种方式循环 尽管让API管理这些循环是个好主意,因为它们可能会针对每个平台进行更好的优化。而不是自己做 但是比优化循环更重要的是使用适当的结构。尝试与List合并将比使用HashSet更长。