转换两个ArrayList

时间:2016-12-16 11:33:31

标签: java arrays algorithm sorting arraylist

我有几个ArrayList:

ArrayList a - > [“52”,“52”,“52”,“52”,“67”,“67”,“67”,“67”]

ArrayList b - > [“1”,“4”,“5”,“6”,“3”,“4”,“5”,“10”]

我想将它们转换为:

ArrayList at - > [“52”,“52”,“67”,“67”]

ArrayList bt - > [“1”,“4 - 6”,“3 - 5”,“10”]

我知道怎么把b变成bt,但是我不能把我的脑袋包裹起来。

使b成为bt的算法:

public static void main(String[] args) {

    ArrayList<String> alist = new ArrayList<String>();
    alist.add("1");
    alist.add("4");
    alist.add("5");
    alist.add("6");
    alist.add("3");
    alist.add("4");
    alist.add("5");       
    alist.add("10");

    alist = groupByRange(alist);

}

static public ArrayList<String> groupByRange(ArrayList<String> alist) {

    // ArrayList<String> to ArrayList<Integer>
    /////////////////////////////////////////////////////////

    ArrayList<Integer> alist_int = new ArrayList<Integer>();
    for (String ident : alist) {
        alist_int.add(Integer.parseInt(ident));
    }

    // ArrayList<Integer> to int[]
    /////////////////////////////////////////////////////////

    int[] arr = new int[alist_int.size()];

    for (int i = 0; i < arr.length; i++) {
        arr[i] = alist_int.get(i);
    }

    // Grouping by range (return ArrayList<String>)
    /////////////////////////////////////////////////////////

    int start, end;
    end = start = arr[0];
    ArrayList<String> alist_res = new ArrayList<String>();
    for (int i = 1; i < arr.length; i++) {
        if (arr[i] == (arr[i - 1] + 1)) {
            end = arr[i];
        } else {

            if (start == end) {
                alist_res.add(String.valueOf(start));
            } else {
                alist_res.add(String.valueOf(start) + " - " + String.valueOf(end));
            }
            start = end = arr[i];
        }
    }

    if (start == end) {
        alist_res.add(String.valueOf(start));
    } else {
        alist_res.add(String.valueOf(start) + " - " + String.valueOf(end));
    }

    for (String n : alist_res) {
        System.out.println(n);
    }

    return alist_res;
}

1 个答案:

答案 0 :(得分:0)

我有你的方法:

   public List<String> groupByValue(List<String> listA) {

    if (listA.isEmpty()) {
        return Collections.emptyList();
    }

    final List<String> result = new ArrayList<>();
    result.add(listA.get(0));

    for (int actualIndex = 1; actualIndex < listA.size(); actualIndex++) {
        if (actualIndex + 1 < listA.size() - 1 && !listA.get(actualIndex + 1).equals(listA.get(actualIndex))) {
            result.add(listA.get(actualIndex));
            actualIndex++;
        }
        if (actualIndex < listA.size() - 1 && !listA.get(actualIndex - 1).equals(listA.get(actualIndex))) {
            result.add(listA.get(actualIndex));
        }
        if (actualIndex + 1 == listA.size()) {
            result.add(listA.get(actualIndex));
        }
    }

    return result;
}

此方法有一个参数,是您的输入列表a。然后,我们chcek列表,接下来,我们从列表中添加第一个值。接下来我们检查下一个值,结果是结果,它表示在列表中。