首页 > 解决方案 > 比较两个arrayList得到共同的值,它应该不影响原始值

问题描述

public void commonId(ArrayList<ArrayList<String>> stylistIdList) {
    if (stylistIdList.size() > 1) {
        array1=stylistIdList.get(0);
        array2=stylistIdList.get(1);
        booleanStylistid=array1.retainAll(array2);
    } else {
        array1=stylistIdList.get(0);
    }
}

在这里,我ArrayList<ArrayList<String>> stylistIdList包含两个arraylist我想从两个列表中获取共同值。它返回共同值,但是在获得共同值之后,该ArrayList<ArrayList<String>> stylistIdList值被更改为共同的ArrayList<ArrayList<String>> stylistIdList值。在获得共同值之后,我想要相同的值。

例子

ArrayList<ArrayList<String>> stylistIdLis = 0(0["abcdefgh"], ["abc"]), 1(0["abcdefgh"]);

输出stylistIdList=("abcdefgh");

获得输出后,ArrayList<ArrayList<String>> stylistIdLis值变为ArrayList<ArrayList<String>> stylistIdLis = 0("abcdefgh"), 1("abcdefgh"); 但我想要这样

ArrayList<ArrayList<String>> stylistIdLis = 0(0["abcdefgh"],["abc"]), 1(0["abcdefgh"]);

标签: java

解决方案


retainAll修改调用它的列表。如果您想在不修改原始列表的情况下获取公共 ID,则需要返回一个新列表。

public ArrayList<String> commonIds(ArrayList<ArrayList<String>> lists) {
    List<String> common = new ArrayList<>(lists.get(0));
    if (lists.size() > 1) common.retainAll(lists.get(1));

    return common;
}

推荐阅读