Как объединить два элемента из списка в один? - PullRequest
1 голос
/ 10 августа 2011

Предположим, у меня есть следующий список:

A | B | C | D или the | temperature | is | 100 | °F | today

Я хочу объединить два атрибута в один, примерно так:

A | BC | D или the | temperature | is | 100°F | today

Как мне этого добиться? При необходимости коллекция может быть изменена.

Ответы [ 3 ]

4 голосов
/ 10 августа 2011

, если вы пытаетесь взять элемент и его наследника и объединить их, это должно сработать:

String i = list.get(iIndex); 
String j = list.get(iIndex + 1);
i= i.concat(j);
list.set(iIndex,i);
list.remove(iIndex + 1);
1 голос
/ 10 августа 2011

Я был удивлен, что не было никакого стандартного метода API, чтобы сделать это. Ну что ж, вот мое домашнее решение:

public static void main(String[] args) {
    final List<String> fruits = Arrays.asList(new String[] { "Apple", "Orange", "Pear", "Banana" });
    System.out.println(fruits); // Prints [Apple, Orange, Pear, Banana]
    System.out.println(merge(fruits, 1)); // Prints [Apple, OrangePear, Banana]
    System.out.println(merge(fruits, 3)); // Throws java.lang.IndexOutOfBoundsException: Cannot merge last element
}

public static List<String> merge(final List<String> list, final int index) {
    if (list.isEmpty()) {
        throw new IndexOutOfBoundsException("Cannot merge empty list");
    } else if (index + 1 >= list.size()) {
        throw new IndexOutOfBoundsException("Cannot merge last element");
    } else {
        final List<String> result = new ArrayList<String>(list);
        result.set(index, list.get(index) + list.get(index + 1));
        result.remove(index + 1);
        return result;
    }
}
0 голосов
/ 10 августа 2011

Для этого нет прямых API.Но ниже вы можете начать

import java.util.ArrayList;
import java.util.List;

public class Test {

    static List<String> list = new ArrayList<String>();

    /**
     * @param toIndex the index of the element that other items are merged with. The final merged item is set at this index.
     * @param indices a comma separated list of indices of the items that need be merged with item at <code>toIndex</code>
     */
    public static void merge(int toIndex, int... indices) {
        StringBuilder sb = new StringBuilder(list.get(toIndex));
        for (int i = 0; i < indices.length; i++) {
            sb.append(list.get(indices[i]));
        }
        for (int i = 0; i < indices.length; i++) {

            list.remove(indices[i]);
        }
        list.set(toIndex, sb.toString());
    }

    public static void main(String[] args) {
        list.add("A");
        list.add("B");
        list.add("C");
        list.add("D");
        merge(1,2);
        System.out.println(list);
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...