@Transactional(isolation = Isolation.READ_UNCOMMITTED
, propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
public void insertPhoneAndArea(List<RecordEntity> recordEntityList) {
int tryCount = 0;
OffsetTime startTime = OffsetTime.ofInstant(Instant.now(), ZoneId.systemDefault());
Map<String, List<RecordEntity>> selfGroup = recordEntityList.stream().collect(Collectors.groupingBy(RecordEntity::getSelfNum));
while (0==selfGroup.size()) {
//There has a bug with Jdk Stream to groupBy in One elements ,So have a loop try
selfGroup = recordEntityList.stream().collect(Collectors.groupingBy(RecordEntity::getSelfNum));
tryCount++;
if (tryCount > 20000) {
break;
}
log.info("try to get SelfNum with Stream bug ! count in {} ",tryCount);
}
}
脚步:
调用名称为insertPhoneAndArea的方法
给定具有变量的相同数据,其中包含“ recordEntityList”,并且该数据不为空
当我执行该方法时,selfGroup为空,其大小为零。所以我对结果感到奇怪。它不应为空,因为recordEntityList不为空。
我使用IDEA打开了调试模式,并且正在使用Alt + LeftClick执行代码
结果是正确的,不是空的。
因此,按预期方式,我在组代码中编写了一个try计数,该循环中的代码大约是随机的,最多30个,这是正确的结果,并且不在while循环中。
我不知道错误是什么。
@Data
public class RecordEntity {
private int id;
/**
* 通话时间
*/
private Date recordTime;
/**
* 持续时长
*/
private Integer duration;
/**
* 通话方式/ 1电话主叫、2电话被叫、3短信主叫、4短信被叫
*/
private Integer recordMode;
/**
* 对方电话号码
*/
private String dialNum;
/**
* 通话地点
*/
private String recordAddress;
/**
* 通话类型/ 1本地、2异地
*/
private Integer recordType;
/**
* 小区编号
*/
private String area;
/**
* 基站号
*/
private String baseStation;
/**
* 交换机号
*/
private String exchange;
/**
* 本机号码
*/
private String selfNum;
/**
* 机主姓名
*/
private String username;
/**
* 机主身份证
*/
private String idNum;
/**
* 通话记录id(唯一)
*/
private String recordId;
/**
* 话单运营商
*/
private Integer operator;
/**
* 对方号码类型(1-手机,2-固话,3-服务号)
*/
private Integer dialNumType;
}
最佳答案
如果Map<String, List<RecordEntity>> selfGroup = recordEntityList.stream().collect(Collectors.groupingBy(RecordEntity::getSelfNum));
将selfGroup
设置为空映射,则必须是因为recordEntityList
为空。
为什么调用者为什么要向您的方法传递一个空列表,我显然不能告诉您。
PS:您不需要Yoda条件,0==selfGroup.size()
。我建议selfGroup.isEmpty()
。
关于java - 为什么Java8 Stream GroupingBy返回空,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59747739/