Lambda 如何在java8函数样式中操作两个相邻的对象,请更改下面的代码
后一个StaffOperInfo对象需要与前一个进行比较,如何将下面的代码更改为java8风格?我的英语很差,希望您不要介意,谢谢Lambda 如何在java8函数样式中操作两个相邻的对象,请更改下面的代码,lambda,java-8,java-stream,Lambda,Java 8,Java Stream,后一个StaffOperInfo对象需要与前一个进行比较,如何将下面的代码更改为java8风格?我的英语很差,希望您不要介意,谢谢 StaffOperInfo before = null; for (StaffOperInfo so : staffMap.get(staffId)) { if (before == null) { before = so; } else {
StaffOperInfo before = null;
for (StaffOperInfo so : staffMap.get(staffId)) {
if (before == null) {
before = so;
} else {
if (so.getTermIp()!=null&&!so.getTermIp().equals(before.getTermIp())
&& so.getAcceptDate().getTime()-
before.getAcceptDate().getTime()<step*1000) {
if (filterMap.containsKey(staffId)) {
filterMap.get(staffId).add(before);
filterMap.get(staffId).add(so);
} else {
List<StaffOperInfo> ll = new ArrayList<>();
ll.add(before);
ll.add(so);
filterMap.put(staffId, ll);
}
}
before = so;
}
}
StaffOperInfo before=null;
for(StaffOperInfo so:staffMap.get(staffId)){
if(before==null){
之前=如此;
}否则{
if(so.getTermIp()!=null&&!so.getTermIp().equals(在.getTermIp()之前)
&&so.getAcceptDate().getTime()-
before.getAcceptDate().getTime()Streams不会使您的代码变得更好。如果您的集合是列表或数组,那么下面的方法就是这样做的(如果不是,这就行不通):
List List=staffMap.get(staffId);
IntStream.range(1,list.size()-1)//列表索引上的流
.mapToObj(i->newstaffoperinfo[]{list.get(i-1),list.get(i)})//获取一对StaffOperInfo
.filter(arr->!Objects.equals(arr[0].getTermIp(),arr[1].getTermIp())//根据您的if条件筛选对
&&(arr[1].getAcceptDate().getTime()-arr[0].getAcceptDate().getTime(){
if(过滤器映射容器(斯塔夫))
filterMap.get(staffId.addAll)(Arrays.asList(arr));
其他的
filterMap.put(staffId,Arrays.asList(arr));
});
正如@Dark发布的那样,通过本机流API实现这一点并不容易/简单。但是您可以尝试一下
streamx.of(staffMap.get(staffId)).forPairs((before,so)->{
if(so.getTermIp()!=null&&!so.getTermIp().equals(在.getTermIp()之前)
&&so.getAcceptDate().getTime()-
在.getAcceptDate()之前。getTime()新建ArrayList());
ll.加上(之前);
ll.加入(so);
}
});
List<StaffOperInfo> list = staffMap.get(staffId);
IntStream.range(1, list.size() - 1) // Stream on Indices of the List
.mapToObj(i -> new StaffOperInfo[]{list.get(i - 1), list.get(i)}) // Get pair of StaffOperInfo
.filter(arr -> !Objects.equals(arr[0].getTermIp(), arr[1].getTermIp()) // Filter pairs based on your if condition
&& (arr[1].getAcceptDate().getTime() - arr[0].getAcceptDate().getTime() < step * 1000))
.forEach(arr -> {
if (filterMap.containsKey(staffId))
filterMap.get(staffId).addAll(Arrays.asList(arr));
else
filterMap.put(staffId, Arrays.asList(arr));
});
StreamEx.of(staffMap.get(staffId)).forPairs((before, so) -> {
if (so.getTermIp()!=null&&!so.getTermIp().equals(before.getTermIp())
&& so.getAcceptDate().getTime()-
before.getAcceptDate().getTime()<step*1000) {
List<StaffOperInfo> ll = filterMap.computeIfAbsent(staffId, k -> new ArrayList<>());
ll.add(before);
ll.add(so);
}
});