주어진 수의 하위 목록에 목록을 균등하게 분배하려고합니다. 예를 들어, 1 ~ 10의 요소 목록이 있고 3 개의 목록이 필요합니다. 이들은 보일 것 같은 :목록을 Java의 하위 목록에 균등하게 배포하십시오.
SL1 -> {1, 2, 3, 4}
SL2 -> {5, 6, 7}
SL3 -> {8, 9, 10}
중요 : 무엇 각 목록에 포함 된 것은 관련이없는, 즉 SL1가 가질 수 {1, 5, 7, 10}. 가장 중요한 것은 크기가 3 인 목록 2 개와 크기 4 인 목록 1 개가 있다는 것입니다.
나는 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
일 필요는 없습니다.
특히 하위 목록을 만드는 첫 번째 루프가 싫습니다.
감사합니다.
대단한 분께 고마워요! 어떤 방식 으로든 첫 번째 루프를 제거 할 수 있습니까? 그것은 실제로 원래의 솔루션에서 가장 귀찮게하는 것이 었습니다. – user3083022
@ user3083022 정말 아닙니다. 다르게 보이게하기 위해 약간의 마술을 사용할 수 있지만, 결국에는 모든 목록 인스턴스를 생성하는 데 항상 어려움을 겪을 것입니다. – Paul
무슨 마법을 말하는거야?외부 라이너 일지라도 받아 들일 수 있습니다. – user3083022