リストを指定した数のサブリストに均等に分配したい。 たとえば、要素1〜10のリストがあり、3つのリストが必要です。リストをJavaのサブリストに均等に配布する
SL1 -> {1, 2, 3, 4}
SL2 -> {5, 6, 7}
SL3 -> {8, 9, 10}
重要:これらはどのように見えるかを各リストに含まれていることは関係ありません、すなわちSL1は{1、5、7、10}を持つことができます。最も重要なことは、サイズが3のリストとサイズが4のリストが2つあることです。
私はIterables.partition
を含むいくつかのことを試しましたが、それは役に立たないでしょう。
私はそれが作品を作ってみただけの事はある:
public Iterable<List<Integer>> distributeEvenlyQueryListIntoLists(final LinkedList<Integer> bigList, final Integer numberOfSublists) {
List<List<Integer>> result = new ArrayList<>();
// Creates as many lists as needed
for (int i = 0; i < numberOfSublists; i++) {
result.add(new ArrayList<>());
}
while (bigList.iterator().hasNext()) {
for (int i = 0; i < numberOfSublists; i++) {
if (!bigList.iterator().hasNext()) {
break;
}
result.get(i).add(bigList.poll());
}
}
return result;
}
渡さbigList
は、それがどのIterable
することができ、LinkedList
である必要はありません。
特に私がサブリストを作成する最初のループは嫌いです。
ありがとうございます!
大変この1つ、ありがとう!私は最初のループを取り除くことができる任意の方法ですか?実際に私の元の解決策から私を悩ましていたものでした。 – user3083022
@ user3083022本当にありません。あなたはそれを違ったものにするために少しの魔法を使うことができますが、結局、それらのすべてのリストインスタンスを作成することに終わります。 – Paul
あなたはどんな魔法について話していますか?たとえそれが外部の1つのライナーであっても、私はそれを取るでしょう – user3083022