我有以下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])
我如何比较列表,以获取具有以下值的新列表:
[“一个”,“两个”,“三个”] ????
基本上: :我要检查整数,看看它是否存在于列表中某个项目的第二个值中,如果存在,则添加第一个项目,到新列表。
答案 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”]