intellij-idea - 地图流 - 误导 Intellij 错误/警告 - 这是一个错误吗?
问题描述
我浪费了 30 分钟,过度依赖 IDE 错误警报,而不是编译器警报。
下面的类有一个错误,但是,IDE 显示了一个不相关的错误,这让我从实际错误中分心。
这是intellij中的错误吗?
import java.util.*;
import static java.util.stream.Collectors.groupingBy;
import static java.util.stream.Collectors.summingLong;
class VisitCounter {
public static void main(String [] args){
VisitCounter v = new VisitCounter();
Map<String, UserStats> ms1 = new HashMap<String, UserStats>() {{
put("100001", new UserStats(10L));
put("100002", new UserStats(1L));
}};
Map<String, UserStats> ms2 = new HashMap<String, UserStats>() {{
put("100001", new UserStats(10L));
put("100002", new UserStats(1L));
put("100003", null);//this should not cause error
put("ABCDEF", new UserStats(1L));//this should not cause error
}};
Map<String, UserStats> ms3 = new HashMap<String, UserStats>() {{
put("100001", new UserStats(10L));
put("100002", new UserStats(1L));
}};
Map<String, UserStats> msNull = null;
Map<Long, Long> result = v.count(ms1, ms2, ms3,msNull);
System.out.println(result);
}
public Map<Long, Long> count(Map<String, UserStats>... visits) {
if (Objects.isNull(visits)) return Collections.emptyMap();
Map<String, Long> result = Arrays.stream(visits)
.filter(Objects::nonNull)//take out null maps
.flatMap(m -> m.entrySet().parallelStream()) // just unpack to entry set . Hey use multi-core!
.filter( entry -> isValidUserId(entry.getKey())) // is key valid , not null, Long parsable
.filter( entry -> isValiduserStats(entry.getValue())) // is key valid , not null, Long parsable
.map( entry -> new AbstractMap.SimpleEntry<Long, Long>(Long.parseLong(entry.getKey()), entry.getValue().getVisitCount().get())) // convert to Long, Long
.collect(groupingBy(Map.Entry::getKey, summingLong(Map.Entry::getValue)));
return result;
}
boolean isValidUserId(String key){
if (Objects.isNull(key)) return false; // null filter
try{
Long.parseLong(key);
}catch( Exception e){
return false; // not long, filter
}
return true;
}
boolean isValiduserStats(UserStats stat){
if (Objects.isNull(stat)) return false; //null filter
if (!stat.getVisitCount().isPresent()) return false; // null value filter
return true;
}
}
IDE 显示了这个虚假错误,这让我偏离了轨道。浪费了 15-20 分钟后,我点击 compile ,并且能够看到编译器
编译器的实际错误非常清楚。但我更多地依赖编译器:-(
/test/src/VisitCounter.java:45:16
java: incompatible types: java.util.Map<java.lang.String,java.lang.Long> cannot be converted to java.util.Map<java.lang.Long,java.lang.Long>
解决方案
推荐阅读
- google-apps-script - App-Scripts-如何一次取消保护一系列重复范围?
- django - 将卡片 ID 保存到表单提交模型中
- gitlab - gitlab 中 raw.githubusercontent 的对应物是什么?
- architecture - 带有分支预测的 CPI 计算练习
- javascript - 如何从反应父组件获取更新状态
- pandas - 在 python pandas 中:使用 '\t' 导入数据时不会改变列数
- c# - 非静态字段、方法或属性“Program.InsertLogData()”需要对象引用
- r - R - grepl 警告:参数“模式”的长度 > 1,仅使用第一个元素
- scrapy - 为什么我不能只抓取这个特定的 P 标签?
- django - Crispy FormHelper 对象没有属性“attrs”