list的实体结构
@Data
public class StatementEndTime {
private String statementEndTime;
private Integer contractId;
private String contractBillId;
}
想要将StatementEndTime 中的contractId和contractBillId作为key,statementEndTime作为value,转成map。
List<StatementEndTime> endTimeList= contractIousRepository.selectByContractIds(stageContractStatisticResultList);
Map<String,String> endTimeMap = endTimeList.stream().collect(Collectors.toMap(item -> item.getContractId()+":"+item.getContractBillId(),StatementEndTime::getStatementEndTime));
这样即可。
toMap有三个重载方法,我用的两个参数的,但两个参数的存在两个问题,一是key不能重复,另一个是value不能为空。
解决key不能重复,需要用三个参数的,可以选择某一个,或者将重复进行合并:
List<StatementEndTime> endTimeList= contractIousRepository.selectByContractIds(stageContractStatisticResultList);
Map<String,String> endTimeMap = endTimeList.stream().collect(Collectors.toMap(item -> item.getContractId()+":"+item.getContractBillId(),StatementEndTime::getStatementEndTime,(key1,key2)->key1));
解决value不能为null,可以用三目处理下value:
List<StatementEndTime> endTimeList= contractIousRepository.selectByContractIds(stageContractStatisticResultList);
Map<String,String> endTimeMap = endTimeList.stream().collect(Collectors.toMap(item -> item.getContractId()+":"+item.getContractBillId(),
value -> value.getStatementEndTime()==null?"":value.getStatementEndTime(),
(key1,key2)->key1));