3

Javaプログラムを使用して、入力値に基づいて文字列のリストを複数のリストに動的に分割したいと思います。

たとえば。私が以下の文字列のリストを持っている場合

     List<String> messages = Arrays.asList("Hello", "World!", "How", "Are", "You");

入力値として2を入力した場合、文字列のリストを条件付きで複数のリストに分割する必要があります。分割された各リストには2つの値が含まれている必要があります。

注:リストに含める必要のある値の数は、入力値に基づいています

       outputshould be: 
       list1 contains-> Hello,world
       list2 contains -> How,Are
       list3 contains -> you
4

4 に答える 4

1

GuavaライブラリにはLists#partitionがあります。

それぞれ同じサイズのリストの連続するサブリストを返します(最終的なリストはこれよりも小さい場合があります)。たとえば、[a、b、c、d、e]を含むリストをパーティションサイズ3でパーティション化すると、[[a、b、c]、[d、e]]-の2つの内部リストを含む外部リストが生成されます。 3つおよび2つの要素、すべて元の順序。

于 2012-08-29T07:12:30.377 に答える
1

別の答えが示唆しているように、List.subList()が最も簡単な方法です。最後のパーティションケースをカバーするためにMath.minを使用します。

int partitionSize = 2;
List<List<String>> partitions = new LinkedList<List<String>>();
for (int i = 0; i < messages.size(); i += partitionSize) {
    partitions.add(messages.subList(i,
            i + Math.min(partitionSize, messages.size() - i)));
}
于 2012-08-29T08:10:25.380 に答える
0

渡された値を使用list.subList(from, to)および計算fromして使用でき ます。to

于 2012-08-29T07:36:22.627 に答える
0

リストが1つおきの要素で切り取られるという事実を知っているので、このようなことができます。

public class Testing {

List<String> messages = Arrays.asList("Hello", "World!", "How", "Are",
        "You");
List<List<String>> lists = new ArrayList<List<String>>();

public Testing() {
    for (int i = 0; i < messages.size(); i++) {
        lists.add(getPartOfList(i));
        i++;
    }
}

private List<String> getPartOfList(int index){
    List<String> tmp = new ArrayList<String>();
    int counter = 0;

    while(counter != 2){
        if(messages.size() > index)
            tmp.add(messages.get(index));
        index++;
        counter++;
    }

    System.out.println(tmp);
    return tmp;
}

public static void main(String[] args) {
    new Testing();
}
}
于 2012-08-29T08:30:22.333 に答える