package com.lenovo.quotation.service;
import com.lenovo.quotation.service.dto.ApproverDTO;
import org.springframework.util.CollectionUtils;
import java.util.*;
import java.util.stream.Collectors;
public class Demo {
public static void main(String[] args) {
test();
groupByStream();
mapDemo();
}
public static void test(){
Map<String, List<ApproverDTO>> approvers = new HashMap<>();
List<String> ancestorGeoUnitIds = new ArrayList<>();
//init
List<ApproverDTO> s1 = new ArrayList();
Collections.addAll(s1,ApproverDTO.builder().geographicUnitId("1").build(),ApproverDTO.builder().geographicUnitId("2").build(),ApproverDTO.builder().geographicUnitId("3").build());
approvers.put("CFO1",s1);
List<ApproverDTO> s2 = new ArrayList();
Collections.addAll(s2,ApproverDTO.builder().geographicUnitId("1").build(),ApproverDTO.builder().geographicUnitId("2").build(),ApproverDTO.builder().geographicUnitId("3").build());
approvers.put("CFO2",s2);
Collections.addAll(ancestorGeoUnitIds,"2","3");
//begin
List<List<ApproverDTO>> resultApproverDTO = approvers.values().stream().map(approverDTOS -> {//approverDTOS多个-List<>
List<ApproverDTO> oneListApproverDTO = null;
for (String ancestorGeoUnitId : ancestorGeoUnitIds) {
oneListApproverDTO = approverDTOS.stream().filter(approverDTO -> ancestorGeoUnitId.equalsIgnoreCase(approverDTO.getGeographicUnitId())).collect(Collectors.toList());
if (!CollectionUtils.isEmpty(oneListApproverDTO)) {
break;
}
}
return oneListApproverDTO;
}).collect(Collectors.toList());
System.out.println("........");
}
//stream- groupBy()
public static Map<String, List<ApproverDTO>> groupByStream(){
List<ApproverDTO> approverDTOList = new ArrayList<>();
Collections.addAll(approverDTOList,ApproverDTO.builder().geographicUnitId("1").build(),ApproverDTO.builder().geographicUnitId("1").build(),ApproverDTO.builder().geographicUnitId("2").build(),ApproverDTO.builder().geographicUnitId("3").build());
Map<String, List<ApproverDTO>> result = approverDTOList.stream().collect(Collectors.groupingBy(ApproverDTO::getGeographicUnitId));
System.out.println("-----------");
return result;
}
//创建List的好方法
public static void mapDemo(){
Map<String, List<ApproverDTO>> approvers = new HashMap<>();
List<String> ancestorGeoUnitIds = new ArrayList<>();
//init
List<ApproverDTO> s1 = new ArrayList();
Collections.addAll(s1,ApproverDTO.builder().geographicUnitId("1").build(),ApproverDTO.builder().geographicUnitId("2").build(),ApproverDTO.builder().geographicUnitId("3").build());
approvers.put("CFO1",s1);
List<ApproverDTO> s2 = new ArrayList();
Collections.addAll(s2,ApproverDTO.builder().geographicUnitId("1").build(),ApproverDTO.builder().geographicUnitId("2").build(),ApproverDTO.builder().geographicUnitId("3").build());
approvers.put("CFO2",s2);
Collections.addAll(ancestorGeoUnitIds,"2","3");
Map<String, List<ApproverDTO>> listMap = approvers.entrySet().stream().map(entry -> {
System.out.println("key-" + entry.getKey() + ":value-" + entry.getValue());
List<ApproverDTO> value = entry.getValue();
List<ApproverDTO> result =null;
for (String ancestorGeoUnitId:ancestorGeoUnitIds) {
result = value.stream().filter(approverDTO -> ancestorGeoUnitId.equalsIgnoreCase(approverDTO.getGeographicUnitId())).collect(Collectors.toList());
if(!CollectionUtils.isEmpty(result)){
break;
}
}
entry.setValue(result);
return entry;
}).collect(Collectors.toMap(entry1 -> entry1.getKey(), entry1 -> entry1.getValue()));
System.out.println("------");
}
}