我有2 arrayList
PresentErrorList
& PastErrorList
我们都有3个字段errorCode
,presentErrorCount
& pastErrorCount
。
presentErrorList
[errorCode=1000,presentErrorCount=10,pastErrorCount =0]
[errorCode=1100,presentErrorCount=2,pastErrorCount =0]
pastErrorList
[errorCode=1003,presentErrorCount=0,pastErrorCount =10]
[errorCode=1104,presentErrorCount=0,pastErrorCount =12]
[errorCode=1000,presentErrorCount=0,pastErrorCount =12]
在计算Present时,pastErrorCount = 0,反之亦然。我的finalArrayList应该是
[errorCode=1000,presentErrorCount=10,**pastErrorCount =12**]
[errorCode=1100,presentErrorCount=2,pastErrorCount =0]
[errorCode=1003,presentErrorCount=0,pastErrorCount =10]
[errorCode=1104,presentErrorCount=0,pastErrorCount =12]`
正如您在errorCode=1000
的最终列表中所看到的那样,因为它在过去是重复的,所以只有一个对象同时存在&过去的错误计数。
答案 0 :(得分:0)
所以找到方法并不容易,但结果是我做的事情:
public static void main(String[] args) {
List<ErrorCodeModel> presentErrorList = new ArrayList<>();
presentErrorList.add(new ErrorCodeModel("1000", 10, 0));
presentErrorList.add(new ErrorCodeModel("1100", 2, 0));
List<ErrorCodeModel> pastErrorList = new ArrayList<>();
pastErrorList.add(new ErrorCodeModel("1003", 0, 10));
pastErrorList.add(new ErrorCodeModel("1104", 0, 12));
pastErrorList.add(new ErrorCodeModel("1000", 0, 12));
Map<String, ErrorCodeModel> map = Stream.of(presentErrorList, pastErrorList)
.flatMap(Collection::stream)
.collect(Collectors.toMap(ErrorCodeModel::getErrorCode,
Function.identity(),
(oldValue, newValue)
-> new ErrorCodeModel(oldValue.getErrorCode(),
oldValue.getPresentErrorCount()+newValue.getPresentErrorCount(),
oldValue.getPastErrorCount()+newValue.getPastErrorCount())));
List<ErrorCodeModel> errorList = new ArrayList<>(map.values());
errorList.sort((err1, err2) //line 20*
-> Integer.compare(Integer.parseInt(err1.getErrorCode()),
Integer.parseInt(err2.getErrorCode())));
System.out.println(errorList.toString());
//*line 20 : Optionnal, if you want to sort by errorCode
//(need to parse to int to avoir alphabetical order
}
所以在添加你的元素之后,就是这样做了:
List
的流已完成Map
:(对象代码,对象)key
总是在地图中,我告诉它添加一个新的Object,它有前一个和新添加的总和List
会根据您的要求生成代表ErrorCodeModel的values