JAVA - 将结果集中的数据存储到hashmap并聚合它们

时间:2016-09-28 08:49:37

标签: java hashmap aggregate

作为标题,我想将结果集中的数据存储到哈希映射中,然后将它们用于进一步处理(max,min,avg,grouping)。

到目前为止,我通过使用适当的哈希映射并从头开始实现每个操作来实现这一点 - 迭代哈希映射(键,值)对。

我的问题是:它是否存在执行此类操作的库? 例如,一个计算List或方法的最大值的方法,给定两个相同大小的数组,执行“索引到索引”的差异。

提前致谢。

5 个答案:

答案 0 :(得分:0)

Collections API已经有了一些有用的功能。

例如maxmin

Collections.max(arrayList);

请调查集合documentation,看看是否有您需要的功能。可能会有woulde。

答案 1 :(得分:0)

例如,有一个Collection类。有许多有用的静态方法,但您必须阅读并选择所需的方法。这是文档:

https://docs.oracle.com/javase/8/docs/api/java/util/Collections.html

  

此类仅包含在或上运行的静态方法   回归收藏。

示例:

        List<Integer> list = new ArrayList<>();
        List<String> stringList = new ArrayList<>();

        // Populate the lists
        for(int i=0; i<=10; ++i){
            list.add(i);
            String newString = "String " + i;
            stringList.add(newString);
        }
        // add another negative value to the integer list
        list.add(-1939);

        // Print the min value from integer list and max value form the string list.

        System.out.println("Max value: " + Collections.min(list));
        System.out.println("Max value: " + Collections.max(stringList));

输出将是:

run:
Max value: -1939
Max value: String 9
BUILD SUCCESSFUL (total time: 0 seconds)

然而,类似的问题在此之前得到了回答,例如: how to get maximum value from the List/ArrayList

答案 2 :(得分:0)

您可以使用java 8流。

<?php 
$q= mysqli_query($conn,"SELECT * FROM products");
while ($row=mysqli_fetch_array($q)) {
  $id = $row['id'];
  $product_name = $row['product_name'];
  $available_stock = $row['available_stock'];
  echo '
   <tr>
     <td>'.$available_stock.'</td>
        <td>'.$product_name.'</td>
        <td><input type="number" min="1" class="form-control" name="qty['.$id .'][]"></td>
       <input type="hidden" name="id['.$id .'][]" value="'.$id.'">
      <tr>
        ';
     }

   ?>

请记住,它仅在您的系统具有jdk 1.8时才有效。对于不支持较低版本的jdk流。

答案 3 :(得分:0)

在Java8中,有IntSummaryStatisticsLongSummaryStatisticsDoubleSummaryStatistics来计算maxmincountaveragesum

public static void main(String[] args) {
    List<Employee> resultSet = ...
    Map<String, DoubleSummaryStatistics> stats = resultSet.stream().collect(Collectors.groupingBy(Employee::getName, Collectors.summarizingDouble(Employee::getSalary)));
    stats.forEach((n, stat) -> System.out.println("Name " + n + " Average " + stat.getAverage() + " Max " + stat.getMax())); // min, sum, count can also be taken from stat
}

static class Employee {
    String name;
    Double salary;

    public String getName() {
        return name;
    }

    public Double getSalary() {
        return salary;
    }
}

答案 4 :(得分:-1)

对于max,min,avg,您可以使用Java 8及其流处理。