Lambda 如何在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对象需要与前一个进行比较,如何将下面的代码更改为java8风格?我的英语很差,希望您不要介意,谢谢

        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);
    }
});