java - 我们从 java 列表中获取所需输出的效率如何?

标签 java list collections java-8

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

现在我必须创建一个列表,其中包含以下条件的记录:

  1. 在每个电路 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/

相关文章:

python - 在 Python 中创建一个列表——有什么鬼鬼祟祟的事情发生吗?

java - 在 Java 中向列表中添加值是否会复制数据或创建引用?

python - 每次运行时清除函数中的列表

c# - 在 .NET 中存储字符串对、创建对象或使用类的最佳方式是什么?

java - 实体随机移动的ArrayList

java - 在 kotlin 中流式传输时收集条件项

java - 安卓 fragment

java - Wicket - 获取标记元素的主体

c# - 在基于行的数据集合中快速或简洁地确定每列最长的字符串

java - 我应该什么时候返回接口(interface),什么时候返回具体类?