CircuitID Department Hours
--------------------------------
Circuit A Electricity 60
Circuit A Hydel 70
Circuit B Hydel 30
Circuit C Electricity 40
Circuit B Electricity 80
Circuit C Hydel 50
Circuit A Electricity 70
现在我必须创建一个列表,其中包含以下条件的记录:
- 在每个电路 ID 中,我需要获取最高小时数的记录,但如果出现重复的小时数,我需要获取电力部门的记录。
上述结果的结果应如下所示:
Circuit A Electricity 70
Circuit B Electricity 80
Circuit C Hydel 50
让我知道如何使用 java 8/java 以最有效的方式有效地迭代以获得最终列表。
我写的代码一点也不完美,我的方法如下所示:
for (int i = 0; i < circuitList.size(); i++) {
for (int j = 0; j < circuitList.size(); {
if (circuitList.get(i).getCircuitId().equals(circuitList.get(j).getCircuitId()) && i != j) {
if (circuitList().get(i).getHours() == circuitList().get(j).getHours()) {
if (circuitList().get(i).getDepartment().equals(“Electricity”) {
newList.add(circuitList().get(i));
}
// some more conditions on getHours
Circuit 类有 pojo 对象和这三个对象的 getter setter。
public class Circuit {
String circuitID;
int hours;
String department;
}
最佳答案
您可以通过具有合并功能的toMap()
收集器来完成。
Map<String, Circuit> map = circuitList
.stream()
.collect(Collectors.toMap(Circuit::getCircuitID, Function.identity(),merge));
合并函数是:
BinaryOperator<Circuit> merge = (left, right) -> {
if (left.hours > right.hours) return left;
else if (left.hours < right.hours) return right;
//if (left.department.equals("Electricity")) return left;
if (right.department.equals("Electricity")) return right;
return left;
};
并得到最终结果:
List<Circuit> result = new ArrayList<>(map.values());
关于java - 我们从 java 列表中获取所需输出的效率如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56312244/