首页 > 解决方案 > 获取与 Arraylist 匹配的 List 的 Arraylist 中的数据

问题描述

我有以下 ArrayList:

public static List c = new ArrayList();
c = [1,2,3];

我在 ArrayList 中有以下列表:

public static ArrayList<List<String>> Contact = new ArrayList<List<String>>();
Contact = (["One",1], ["Two", 2], ["Three",3], ["Four", 4])

如何比较列表中的列表,以获得具有以下值的新列表:

[“一二三”] ????

基本上:我想检查整数,看看它是否存在于列表中某个项目的第二个值中,如果存在,则将第一个项目添加到新列表中。

标签: javaandroidarrayslistarraylist

解决方案


好的,如果在任何情况下您的代码如下所示:

List<Integer> c = new ArrayList(Arrays.asList(1, 2, 3));
ArrayList<List<String>> contact = new ArrayList<List<String>>();
contact.add(Arrays.asList("One", "1"));
contact.add(Arrays.asList("Two", "2"));
contact.add(Arrays.asList("Three", "3"));
contact.add(Arrays.asList("Four", "4"));

您可以像这样使用流:

List<String> result = contact.stream()
        .filter(l -> c.contains(Integer.valueOf(l.get(1))))
        .map(l -> l.get(0))
        .collect(Collectors.toList());

这会给你:

[One, Two, Three]

更好的解决方案

为了做好工作,我会创建一个包含 id 和名称的类 Contact ,例如:

class Contact{
   private Integer id;
   private String name;

   //constructor getters and setters
}

然后像这样填写您的列表:

ArrayList<Contact> contact = new ArrayList<>();
contact.add(new Contact(1, "One"));
contact.add(new Contact(2, "Two"));
contact.add(new Contact(3, "Three"));
contact.add(new Contact(4, "Four"));

因此,当您要搜索时,可以使用:

List<String> result = contacts.stream()
        .filter(l -> c.contains(l.getId()))
        .map(Contact::getName)
        .collect(Collectors.toList());

它可以更具可读性,对工作更有帮助。


推荐阅读