关于Arraylist的谓词

时间:2016-07-05 10:21:17

标签: java android arraylist predicate

我有以下结构的两个数组列表:

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 等所有详细信息。

提前致谢。

1 个答案:

答案 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中找到类似的东西。