java 集合操作
1,List 分组处理
1,第一种
/**
* 将原始list按照MAX_LIST_SIZE分组
* @param list
* @return
*/
public long generateListGroupByparsing(WeightReportRequest request,BufferedWriter writer ,List<WeightReportItemResponse> list, int maxListSize) throws IOException {
long count = 0;
if (org.apache.commons.collections4.CollectionUtils.isEmpty(list) || list.size() <= maxListSize) {
//具体list 处理
listPRoss( request, writer ,list);
count += list.size();
} else {
int pages = (int) Math.ceil((double)list.size() / (double)maxListSize);
for (int i = 0; i < pages; i++) {
int fromIndex = i * maxListSize;
int toIndex = (i + 1) * maxListSize > list.size() ? list.size()
: (i + 1) * maxListSize;
List<WeightReportItemResponse> subList = list.subList(fromIndex, toIndex);
//具体list 处理
listPRoss( request, writer ,subList);
count += subList.size();
}
}
writer.close();
return count;
}
2,第二种
/**
* 分批发
* @param dataList
* @param staffResponse
* @return
*/
public List<String> batchWayBill(List<CallImportDto> dataList,StaffResponse staffResponse,int pointsDataLimit){
List<String> list = new ArrayList<>();
List<CallImportDto> newList = new ArrayList<>();
for(int i=0;i<dataList.size();i++){//分批次处理
newList.add(dataList.get(i));
if(pointsDataLimit == newList.size()||i == dataList.size()-1){
//发送MQ
List<String> listBill = saveWayBillnosCallInfo(newList, staffResponse);
list.addAll(listBill);
newList.clear();
}
}
return list;
}
3,第三种
@Override
public void synDataByopRlUserApi() {
long t1 = System.currentTimeMillis();
DateTime startTime = DateTime.now();
log.info("------开始同步老系统用户数据,开始时间 " + startTime + "------");
QueryWrapper queryWrapper = new QueryWrapper();
//分页查询
Integer pageNo = 1;
Integer limit = 20;
Boolean boFag = true;
Integer index = 0;
while (boFag){
Page page = new Page(pageNo+index,limit);
IPage<OldUserEntity> iPage = oldUserMapper.selectPage(page,queryWrapper);
for (OldUserEntity forDto : iPage.getRecords()){
updateByopRlUserApi(forDto);
}
log.warn("jesse="+iPage.getPages()+","+iPage.getCurrent()+","+iPage.getTotal());
if(index * limit >= iPage.getTotal() ){
boFag = false;
}
index ++;
}
}
2,集合 交集并集差集
package case02.demo02;
import static java.util.stream.Collectors.toList;
import java.util.ArrayList;
import java.util.List;
public class Test {
public static void main(String[] args) {
List<String> list1 = new ArrayList();
list1.add("1111");
list1.add("2222");
list1.add("3333");
List<String> list2 = new ArrayList();
list2.add("3333");
list2.add("4444");
list2.add("5555");
// 交集
List<String> intersection = list1.stream().filter(item -> list2.contains(item)).collect(toList());
System.out.println("---得到交集 intersection---");
intersection.parallelStream().forEach(System.out :: println);
// 差集 (list1 - list2)
List<String> reduce1 = list1.stream().filter(item -> !list2.contains(item)).collect(toList());
System.out.println("---得到差集 reduce1 (list1 - list2)---");
reduce1.parallelStream().forEach(System.out :: println);
// 差集 (list2 - list1)
List<String> reduce2 = list2.stream().filter(item -> !list1.contains(item)).collect(toList());
System.out.println("---得到差集 reduce2 (list2 - list1)---");
reduce2.parallelStream().forEach(System.out :: println);
// 并集
List<String> listAll = list1.parallelStream().collect(toList());
List<String> listAll2 = list2.parallelStream().collect(toList());
listAll.addAll(listAll2);
System.out.println("---得到并集 listAll---");
listAll.parallelStream().forEach(System.out :: println);
// 去重并集
List<String> listAllDistinct = listAll.stream().distinct().collect(toList());
System.out.println("---得到去重并集 listAllDistinct---");
listAllDistinct.parallelStream().forEach(System.out :: println);
System.out.println("---原来的List1---");
list1.parallelStream().forEach(System.out :: println);
System.out.println("---原来的List2---");
list2.parallelStream().forEach(System.out :: println);
// 一般有filter 操作时,不用并行流parallelStream ,如果用的话可能会导致线程安全问题
}
}