Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在java中同时合并两个java对象列表_Java - Fatal编程技术网

如何在java中同时合并两个java对象列表

如何在java中同时合并两个java对象列表,java,Java,我们正在使用两种不同的服务。 设备名称存储在服务的redis上。 设备值存储在B服务的mysql上 我想,我可以在mysql上列出B服务的设备列表。 我可以使用RedisAPI立即获得设备名称列表 但是如何同时合并这两种列表对象呢? 我想在避免性能问题的同时或为了避免性能问题 我使用JDK7 谢谢 ===================================== 我的问题是如何合并两个对象,而不是列表 Class Device { Integer id; String

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

我想,我可以在mysql上列出B服务的设备列表。 我可以使用RedisAPI立即获得设备名称列表

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

我使用JDK7

谢谢

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

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

Class Device {
    Integer id;
    String deviceName;
    List deviceValues;
}
我可以在Mysql上获取id和DeviceValue。 我可以从redis获得deviceName

如果我得到下面的对象,如何合并它

List<Device> devices = getFromMysql(); //deviceName is null
List<String> deviceNames = getFromRedis();
List devices=getFromMysql()//deviceName为空
列出deviceNames=getFromRedis();
如何合并设备和设备名称?

List newList=new ArrayList();
 List<String> newList = new ArrayList<String>();
 newList.addAll(listOne);
 newList.addAll(listTwo);
newList.addAll(listOne); addAll(列表二);
其他选择:

 List<String> newList = new ArrayList<String>(listOne);
 newList.addAll(listTwo);
List newList=newarraylist(listOne);
addAll(列表二);

其中listOne是第一个列表,listwo是第二个列表。您可以根据需要使用任何类型而不是类型字符串。

如果您使用的是Apachecommon,则

ListUtils.union(list1,list2);
你也可以找

将多个iterable合并为一个iterable。返回 iterable有一个遍历每个iterable元素的迭代器 在输入中。直到必要时才轮询输入迭代器。这个 返回的iterable的迭代器在相应的 输入迭代器支持它


您要求合并,我的理解是,如果一个元素对两个列表都是公共的,那么结果列表应该有一次。
集合是实现这一点的好方法

 Set<String> set = new HashSet<>( (listOne.size()+listTwo.size()) * 2 );
 set.addAll(listOne);
 set.addAll(listTwo);
 List<String> newList = new ArrayList<>();
 newList.addAll( set );
Set Set=newhashset((listOne.size()+listwo.size())*2);
set.addAll(listOne);
set.addAll(列表二);
List newList=newarraylist();
newList.addAll(集合);
还请注意,尽管您希望避免使用
for
while
,但这实际上是不可能的。这段代码和其他任何代码只是在隐藏它们。
addAll
的实现将以这样或那样的方式有一个循环。
不过,让API管理这些循环是个好主意,因为它们可能会针对每个平台进行更好的优化。而不是自己做。

但比优化循环更重要的是使用适当的结构。尝试使用列表进行合并比使用哈希集要花费更长的时间。

查看此示例,您希望如何处理两个列表共有的元素?是否有重复条目的结果列表?一方面是名称列表,另一方面是没有名称的设备列表。你如何把它们联系在一起?哪个应该是结果列表的类型?排序、设备[0]和设备名称[0]是同一对象。