나는 List<Object>
에 100 개의 개체가 들어 있다고 가정 해 봅시다. Java 8 (계층 라이브러리가없는)에서 이 1Object
인 List<List<Object>>
을 얻는 가장 좋은 방법은 무엇입니까?목록 목록으로 목록에 나열
답변
은 당신이 takeWhile를 사용하여 IntStream와 인덱스를 생성 할 수 있습니다 (당신이 했나요 당신이 어쨌든이를 넣어 without any tierce library
를 게시) 자바 (9)에서
@Test
public void givenList_whenParitioningIntoNSublists_thenCorrect() {
List<Integer> intList = Lists.newArrayList(1, 2, 3, 4, 5, 6, 7, 8);
List<List<Integer>> subSets = Lists.partition(intList, 3);
List<Integer> lastPartition = subSets.get(2);
List<Integer> expectedLastPartition = Lists.<Integer> newArrayList(7, 8);
assertThat(subSets.size(), equalTo(3));
assertThat(lastPartition, equalTo(expectedLastPartition));
}
외부 final
카운터가 필요하지만 작동하는 것 같습니다.
// Must be final (or implicitly final).
AtomicInteger n = new AtomicInteger();
Map<String, List<Integer>> groups = IntStream.range(0, 100)
.boxed()
.collect(Collectors.groupingBy(
// Group by n/10.
o -> String.valueOf(n.getAndIncrement()/10)
)
);
PrimitiveIterator.OfInt를 사용하여 AtomicInteger를 피할 수 있습니다. – richardstartin
@richardstartin - 멋지다! 고마워, 나는 PrimitiveIterator를 보지 못했다. – OldCurmudgeon
내가 먼저 (귀하의 경우 10 개 요소) 척 크기를 가지고, 다음 목록 가서 그것의 덩어리를 취할 subList
을 사용하십시오. 예컨대 :
List<List<Object>> subLists = IntStream
.range(0, (int) Math.ceil((double) list.size()/subListSize))
.mapToObj(i -> new ArrayList<>
(list.subList(i * subListSize, (i + 1) * subListSize)))
.collect(Collectors.toList());
참고 : double
및 천장에 캐스팅이 subListSize
정확히 list.size()
를 분할하지 않는 경우 정수 나누기를 방지하기 위해 아래이다.
구아바를 사용하여 다음 해당 인덱스는에서 하위 목록을 사용하여 더 간단합니다 원래 목록. 이 에 대한 객체의 목록을 작동합니다 :
private static final int BATCH_SIZE = 10;
public void test(){
List<List<Object>> batchedLists = split(generateTestObjects());
}
public List<List<Object>> split(List<Object> objects) {
return IntStream.iterate(0, n -> n + BATCH_SIZE)
.takeWhile(n -> n < objects.size())
.map(t -> objects.subList(t, Math.min(t + BATCH_SIZE, objects.size()))
.collect(Collectors.toList());
}
public List<Object> generateTestObjects(){
return IntStream.range(0, 100)
.boxed()
.collect(Collectors.toList());
}
- 1. Nhibernate - 선택 목록에 나열
- 2. 목록으로 목록 목록 검색
- 3. 튜플 변환 목록에 나열
- 4. 열린 파일 목록에 나열
- 5. 다른 목록으로 목록 업데이트
- 6. 목록을 사전 목록에 목록으로 병합
- 7. Sage를 목록으로 변환 목록의 목록으로 목록의 목록 목록
- 8. 정수 목록에 문자열 목록?
- 9. 목록 목록에 카운터 사용
- 10. 링크 된 목록 나열
- 11. 목록 요소를 목록 목록으로 변환
- 12. C# 다른 목록/새 목록으로 목록 초기화
- 13. R 목록으로 나열, 신청하기 전에 xPath 확인하기
- 14. Python 하위 목록으로 목록 분할
- 15. Python 목록으로 쓸 nparray 목록
- 16. InfoPath 목록으로 SharePoint 목록 업데이트?
- 17. 목록에 목록 삽입
- 18. 스칼라 - 목록 목록을 하나의 목록으로 변환 : [목록 [A]] 목록으로 [0121]
- 19. 목록을 목록 목록으로 나누십시오.
- 20. 트리 목록으로 사전 목록
- 21. 목록으로 튜플 목록 변환
- 22. 분할 여러 목록으로 목록
- 23. 다른 목록에 목록 추가?
- 24. 2에서 데이터 읽기 MOSS 2007의 세 번째 목록에 나열
- 25. 목록 내 목록에 대한 질문
- 26. Jenkins Pipelines의 정렬 목록 나열
- 27. haskell의 튜플 목록에 나열 하시겠습니까? 하스켈에서
- 28. 목록 (테이블) 목록에 문자열 인쇄
- 29. 목록보기 목록 내부 목록에 목록
- 30. 사전 목록을 목록 목록으로 변환하려면 어떻게해야합니까?
@birryree 당신은 회신하기 전에 게시물을 읽을 수는 자바 (8)는 것을 의미하지 않는다 언급해서, 그것은 Java8 – Moussi
@Moussi을 했나요되어하시기 바랍니다 비 Java8 특정 답변이 적용되지 않습니다. – birryree
@birryree는 고전 자바로 모든 것을 할 수 있지만 포스터는 java8 솔루션을 찾고 있습니다. – Moussi