Java 我想写一个函数来检查二维列表中的重复元素

Java 我想写一个函数来检查二维列表中的重复元素,java,Java,我想写一个函数来检查二维列表中的重复元素。例如:[[key1,key2],[key1,key3]]“key1”是重复的。我想删除或替换它,例如,使用n\a。到目前为止我都试过了 private static List<List<String>> removeRedundantStrings(List<List<String>> list) { List<List<String>> outList =

我想写一个函数来检查二维列表中的重复元素。例如:[[key1,key2],[key1,key3]]“key1”是重复的。我想删除或替换它,例如,使用n\a。到目前为止我都试过了

    private static List<List<String>> removeRedundantStrings(List<List<String>> list) {

        List<List<String>> outList = new ArrayList<>();

        List<String> oneDimension = new ArrayList<>();

        for (var tempList : list) {
            for (var string : tempList) {

                if (!oneDimension.contains(string))
                    oneDimension.add(string);

                else
                    oneDimension.add("n/a");

                outList.add(oneDimension);

            }

        }

        return outList;

    }

private static List removeredundatstrings(列表列表){
列表大纲列表=新的ArrayList();
List oneDimension=new ArrayList();
for(var templast:list){
for(变量字符串:templast){
如果(!oneDimension.contains(字符串))
一维。添加(字符串);
其他的
一维。添加(“不适用”);
添加(一维);
}
}
返回最长时间;
}

此“解决方案”导致:[[key1,key2,n/a,key3]]-不是“真实”的二维列表。如何实现与输入列表相同的格式?结果将是:[[key1,key2],[n/a,key3]]。我还缺什么吗

您应该在正确的位置创建内部列表-在外部循环内

此外,我将使用一个
HashSet
来跟踪已经出现的
字符串

List<List<String>> outList = new ArrayList<>();
Set<String> uniques = new HashSet<>();

for (var tempList : list) {
    List<String> oneDimension = new ArrayList<>();
    for (var string : tempList) {
        if (uniques.add(string)) // add will return true if string was actually added to Set
            oneDimension.add(string);
        else
            oneDimension.add("n/a");
        }
    }
    outList.add(oneDimension);
}
List-outList=new-ArrayList();
Set uniques=new HashSet();
for(var templast:list){
List oneDimension=new ArrayList();
for(变量字符串:templast){
if(uniques.add(string))//如果字符串实际添加到集合中,则add将返回true
一维。添加(字符串);
其他的
一维。添加(“不适用”);
}
}
添加(一维);
}

您需要在第二个for之前每次实例化一个维度,并在第二个for close出现我纠正的输入错误时将oneDim添加到outList。