java - Arraylist 上的谓词

标签 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
}

如何用谓词实现这一点?任何人都可以帮忙吗?

实际情况就像我有一个来自设备联系人的联系人数组列表,其中包含姓名、号码、电子邮件ID,当我将这些联系人与我的同步时app serve我得到number, userId and Image Url 作为返回。现在我需要用这两个数组映射数字并需要生成通用数组,其中包含所有详细信息,如数字、名称、电子邮件 ID、用户 ID、图像 Url

提前致谢。

最佳答案

我昨天制作了这个实用函数以将两个列表压缩在一起。

您传入两个列表和一个 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 中找不到类似的东西。

关于java - Arraylist 上的谓词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38200938/

相关文章:

java - NoClassDefFoundError 异常

android - 使用 DialogFragment AlertDialog 中的更改更新 ListFragment(父级)中的列表

android - 设置ImageResource时ImageView变慢

java - android读取USSD响应

java - 如何将 JSON 数组解析为 Android 列表

java - 如何从另一个类访问 arrayList (存储在主类中)?

java - ArrayList不打印所有元素

java - 如何在mongotemplate中使用orOperator

java - 整数除法的输入异常(Java)

java - 从 Git 自动部署 Grails/Java web 应用程序到 Tomcat7