重构for循环和错误(类型不匹配:无法从元素类型String转换为Integer)

时间:2018-11-13 13:55:58

标签: java refactoring

此方法用于检查重复的变量。 最近,我发现了一种新语法:

for-loop(String s: List) like this.

我试图将新指令应用于当前代码,但这会导致错误

Type mismatch: cannot convert from element type String to Integer
  1. 我想重构我的代码(请告知我)

  2. 为什么要使用语法(for(Integer i:重复列表)// for(Integer k :checkList))有错误吗?有什么办法可以应用这种新语法?或其他建议?

这是我的原始代码:

public List<String> checkDuplicateInArray(List<String> checkList) {

    Set<String> unique = new HashSet<>();
    Set<String> duplicate = new HashSet<>();

    for (String val : checkList) {
        (unique.contains(val) ? duplicate : unique).add(val);
    }

    List<String> duplicateList = new ArrayList<>(duplicate);

    //**************I want to change this part..*************
    for (int i = 0; i < duplicateList.size(); i++) {
        int a = 0;

        for (int k = 0; k < checkList.size(); k++) {
            if (duplicateList.get(i).trim().equals(checkList.get(k).trim())) {
                if(a!=0){

                    checkList.set(k, checkList.get(k) + a);
                    }
                a++;
            }
        }
    }       
    return checkList;
}

这是我更改它的方式(会产生错误):

类型不匹配:无法从元素类型String转换为Integer

    for (Integer i : duplicateList) {
        int a = 0;

        for (Integer k :checkList) {
            if (duplicateList.get(i).trim().equals(checkList.get(k).trim())) {
                if(a!=0){

                    checkList.set(k, checkList.get(k) + a);
                    }
                a++;

            }
        }
    }

请帮忙吗?

1 个答案:

答案 0 :(得分:1)

You declared:

Set<String> duplicate = new HashSet<>();

But you tried to iterate on Integer:

for (Integer i : duplicateList) {

So you naturally must respect the type:

for (String s : duplicateList) {