指定长度拆分集合
public class CollectionTest {
@Test
public void test(){
List<SmsContent> list = getList();
splitListWithGuava(list, 20);
System.out.println("-----------------------------------");
List<List<SmsContent>> subList = getSubList(list, 20);
subList.forEach(list1 -> System.out.println(JSON.toJSONString(list1)));
}
private void splitListWithGuava(List<SmsContent> list, int len) {
List<List<SmsContent>> partition = Lists.partition(list, len);
partition.forEach(smsContents -> System.out.println(JSON.toJSONString(smsContents)));
}
private List<List<SmsContent>> getSubList(List<SmsContent> list, int len) {
List<List<SmsContent>> resultList = new ArrayList<>();
if (CollectionUtils.isEmpty(list)) {
return resultList;
}
for (int i = 0; i < list.size(); i++) {
if (i % len == 0) {
int count = i / len;
List<SmsContent> subList = list.stream().limit((count + 1L) * len).skip(count * (long)len).collect(Collectors.toList());
resultList.add(subList);
}
}
return resultList;
}
private List<SmsContent> getList(){
List<SmsContent> list = new ArrayList<>();
int code = 100;
for (int i = 0; i < code; i++) {
SmsContent smsContent = new SmsContent();
smsContent.setCode(i);
smsContent.setContent("content" + i);
list.add(smsContent);
}
return list;
}
@Data
private class SmsContent{
private int code;
private String content;
}
}