티스토리 뷰
반응형
안녕하세요!
오늘은 List를 각각 쪼개서 사용할 수 있는 partition 메소드를 간단히 알아보려 합니다.
이전의 자바에서는 아래와 같이 리스트를 쪼개서 사용했습니다.
예를 들어 101개의 아이템이 담겨 있는 리스트의 경우 20개씩 분배해서 사용을 하기 위해서는 아래와 같이 작성했습니다.
public List divided(List<String> list) {
List<List> res = new ArrayList<>();
if(list.size() > 100) {
res.add(list.subList(0, 20));
res.add(list.subList(20, 40));
res.add(list.subList(40, 60));
res.add(list.subList(60, 80));
res.add(list.subList(80, 100));
res.add(list.subList(100, list.size());
} else if(list.size() > 80) {
res.add(list.subList(0, 20));
res.add(list.subList(20, 40));
res.add(list.subList(40, 60));
res.add(list.subList(60, 80));
res.add(list.subList(80, list.size());
} else if(list.size() > 60) {
...
}
return res;
}
하지만 이렇게 작성하는것보다 foreach 문을 사용하면 더 효율적일 것입니다.
public List divided(List<String> list) {
List<List> res = new ArrayList<>();
if(list.size() > 100) {
for(int i=0; i<=list.size()/20; i++) {
res.add(list.subList(i*20, (i+1)*20));
}
} else if(list.size() > 80) {
...
}
...
return res;
}
위처럼 개발을 진행하게 되면 가독성면에서도 많이 떨어지는데 이를 보완하기 위해 partition이라는 메소드를 제공해줍니다.
사용 방법은 정말 간단하게도 아래와 같이 한줄로 가능합니다.
final List<String> stringList = ...
final int pagingSize = 20;
final List<List<String>> partition =
Lists.partition(stringList, pagingSize);
만들어진 파티셔닝 리스트는 아래와 같이 사용 가능합니다.
// getter
partition.get(0); // stringList의 0~20
partition.get(1); // stringList의 20~40
* 2022-09-15 추가
먼저 위의 Lists 를 사용하기 위한 의존성으로는 기본적으로 제공되지 않기 때문에 Google 에서 제공하는 Guava DI 를 진행해주어야 합니다.
pom.xml
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>31.1-jre</version>
<!-- or, for Android: -->
<version>31.1-android</version>
</dependency>
build.gradle
dependencies {
// Pick one:
// 1. Use Guava in your implementation only:
implementation("com.google.guava:guava:31.1-jre")
// 2. Use Guava types in your public API:
api("com.google.guava:guava:31.1-jre")
// 3. Android - Use Guava in your implementation only:
implementation("com.google.guava:guava:31.1-android")
// 4. Android - Use Guava types in your public API:
api("com.google.guava:guava:31.1-android")
}
감사합니다~!
반응형
'Server' 카테고리의 다른 글
[Java] JSON String to Map (4) | 2021.12.02 |
---|---|
에러 페이지의 작동원리 이해하기 (6) | 2021.12.01 |
[Java] Map의 확장 형태인 NavigableMap (0) | 2021.11.27 |
[Java] JPA 사용시 Truncate 사용방법 (4) | 2021.11.25 |
[Java] DTO에 자동 호출 로직 적용하기 (2) | 2021.11.22 |
[Java] QueryDSL 을 사용하여 Multi Data Source 사용하기 (0) | 2021.11.13 |
댓글
공지사항