为了账号安全,请及时绑定邮箱和手机立即绑定

获取与 Arraylist 匹配的 List 的 Arraylist 中的数据

获取与 Arraylist 匹配的 List 的 Arraylist 中的数据

扬帆大鱼 2021-06-24 18:00:51
我有以下 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 回答

?
波斯汪

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"]


查看完整回答
反对 回复 2021-06-30
?
眼眸繁星

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

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


查看完整回答
反对 回复 2021-06-30
  • 2 回答
  • 0 关注
  • 191 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信