指定长度拆分集合
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 + 1 L) * 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;
}
}