以下是使用 Java 8 的 Stream API 进行优化后的方法:
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
class Entity {
String name;
int pid;
long time;
long lastTime;
public Entity(String name, int pid, long time) {
this.name = name;
this.pid = pid;
this.time = time;
}
public Entity(String name, int pid, long time, long lastTime) {
this.name = name;
this.pid = pid;
this.time = time;
this.lastTime = lastTime;
}
}
public class Main {
public static List<Entity> calculatePercentage(List<Entity> beforeList, List<Entity> afterList, long duringTime) {
return beforeList.stream()
.map(beforeEntity -> {
Entity afterEntity = afterList.stream()
.filter(a -> a.pid == beforeEntity.pid)
.findFirst()
.orElse(null);
if (afterEntity!= null) {
long lastTime = afterEntity.time - beforeEntity.time;
return new Entity(beforeEntity.name, beforeEntity.pid, beforeEntity.time, lastTime);
} else {
return beforeEntity;
}
})
.collect(Collectors.toList());
}
public static void main(String[] args) {
List<Entity> before = new ArrayList<>();
before.add(new Entity("item1", 1, 1000));
before.add(new Entity("item2", 2, 2000));
List<Entity> after = new ArrayList<>();
after.add(new Entity("item3", 1, 1500));
after.add(new Entity("item4", 2, 2500));
List<Entity> result = calculatePercentage(before, after, 1000);
result.forEach(System.out::println);
}
}
这个方法使用了 Java 8 的 Stream API,更加简洁优雅。它遍历beforeList,对于每个元素,在afterList中查找具有相同pid的元素,如果找到则计算时间差并创建一个新的包含lastTime的Entity对象,否则直接返回原对象。最后将处理后的结果收集到一个新的列表中并返回。