我有以下结构的两个数组列表:
Arraylist A ::
{name : name1,
number : 1234
},
{name : name2,
number : 4567
},
{name : name3,
number : 6789
}
Arraylist B ::
{number : 1234,
userId : u1
},
{number : 4567
userId : u2
},
{number : 6789
userId : u3
}
现在我需要以下列方式合并两个数组:
Arraylist C ::
{name : name1,
number : 1234,
userId : u1
},
{name : name2,
number : 4567,
userId : u2
},
{name : name3,
number : 6789,
userId : u3
}
如何使用谓词实现此目的?任何人都可以帮忙。?
实际情况就像我有一个来自设备联系人的联系人的数组列表,其中包含姓名,号码,emailId 以及当我将这些联系人与我的同步时应用服务 ri获得 number,userId和Image Url 作为回报。现在我需要使用这两个数组映射数字,并且需要生成公共数组,其中包含数字,名称,emailId,userId,Image Url 等所有详细信息。
提前致谢。
答案 0 :(得分:0)
我昨天将这个实用程序功能改为 zip 两个列表。
你传入两个列表,一个BiFunction
使用每个列表中的元素并创建一个新元素添加到结果列表中:
public static <T, S, R> List<R> zip(List<? extends T> l1, List<? extends S> l2,
BiFunction<? super T, ? super S, R> zipper) {
int size = Math.min(l1.size(), l2.size());
List<R> result = new ArrayList<>();
for(int i = 0; i < size; i++)
result.add(zipper.apply(l1.get(i), l2.get(i)));
return result;
}
像这样使用:
class A {...}
class B {...}
class C { // Combination of A and B
...
public C(name, number, emailId, userId, imageUrl) {...} // Types ommitted
// public C(A a, B b) {...} // <-- optionally this, you could just pass C::new
...
}
List<A> list1 = ...;
List<B> list2 = ...;
List<C> list3 = zip(list1, list2,
(a, b) -> new C(a.getName(), a.getNumber(), a.getEmailID(),
b.getUserId(), b.getImageUrl())); // Use appropriate getters.
我无法在Java API中找到类似的东西。