压缩ArrayLists

时间:2019-10-27 21:24:10

标签: java arraylist

我正在尝试用Java编写一种方法,该方法将压缩字符串的ArrayList。例如,如果我们有一个由字符串["0", "1", "2", "3"]组成的ArrayList,则ArrayListMethods.condense(["0", "1", "2", "3"])会将ArrayList更改为["01", "23"]

import java.util.ArrayList;

public class ArrayListMethods
{
  public static void condense(ArrayList<String> array){
        for (int i = 0; i < array.size(); i++){
            array.get(i) += array.get(i + 1);
            array.remove(i + 1);
        }
  }
}

我遇到了错误,但是我不确定为什么。

没关系,问题已解决。我重写了这样的代码:

public static void condense(ArrayList<String> array){
        for (int i = 0; i < array.size() - 1; i++){
            String one = array.get(i);
            String two = array.get(i+1);
            String both = one+two;
            array.set(i, both);
            array.remove(i + 1);
        }
    }

2 个答案:

答案 0 :(得分:1)

array.get(i)不是变量,它是一个函数调用,在您的情况下返回String。 您不能为其分配任何内容。

您可能想要类似array.set(i, array.get(i + 1))

答案 1 :(得分:1)

如果您确定总是有偶数个元素,则可以执行以下操作:

public static void condense(ArrayList<String> array){
    for (int i = 0; i < array.size(); i++){
        array.set(i, array.get(i)+array.get(i + 1));
        array.remove(i + 1);
    }
}

一种更好的方法应该是:

public static void condense2(List<String> list){
    int groupSize = 2;
    List<String> result = new ArrayList<>();        
    for (int i = 0; i < list.size(); i += groupSize) {
        result.add(String.join("", list.subList(i,Math.min(i + groupSize, list.size()))));            
    }
    System.out.println(result);
}

通过第二种方法,您不仅可以连接两个字符串,还可以通过更改groupSize来从["012", "345", "6"]的输入中获得类似["0","1","2","3","4","5","6"]的效果