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