在与Arraylist匹配的列表的Arraylist中获取数据

时间:2018-08-05 08:45:05

标签: java android arrays 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])

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

[“一个”,“两个”,“三个”] ????

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

2 个答案:

答案 0 :(得分:1)

好的,如果您的代码是这样的:

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]

更好的解决方案

为了完成一项好工作,我将创建一个Contact类,其中包含id和一个名称,例如:

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());

工作更具可读性和帮助性。

答案 1 :(得分:1)

与其创建ArralyList>,不如使用HashMap

将数据另存为

c = [1,2,3];

Map<Int, String> data = new HashMap();
data.put(1, "One");
data.put(2, "Two");
data.put(3, "Three");

ArrayList<String> output = new ArrayList()
for(int i=0 i<c.length; i++) {
    output.add(data.get(c[i]));
}

现在输出将具有数据[“ One”,“ Two”,“ Three”]