2 回答
![?](http://img1.sycdn.imooc.com/533e51f30001edf702000200-100-100.jpg)
TA贡献1811条经验 获得超4个赞
与其创建一个 ArrayList>,不如使用一个 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"]
![?](http://img1.sycdn.imooc.com/54584cde0001d19202200220-100-100.jpg)
TA贡献1873条经验 获得超9个赞
好的,如果在任何情况下您的代码如下所示:
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());
它可以更具可读性,对工作更有帮助。
添加回答
举报