Java8 提供了很多函数式编程的新特性,其中包括对集合(Collection)的数据处理方式的改进。下面我来介绍一下如何使用 Java8 来实现分组计算数量和计算总数的操作。
分组计算数量
在 Java8 中,我们可以通过 Collectors.groupingBy()
方法来实现对集合进行分组。具体实现方法如下:
Map<String, Long> result = list.stream()
.collect(Collectors.groupingBy(Item::getCategory, Collectors.counting()));
这段代码中,使用 stream()
方法将集合转换为流,然后使用 groupingBy()
方法将集合按照 Item
对象中的 category
属性进行分组,最后利用 counting()
方法统计每组的数量。
其中,Map<String, Long>
表示分组之后的结果,其中 key 表示被分组的属性,value 表示该属性下的数量。
例如,如果我们有一个 Item
类,其中包含 id
和 category
两个属性,现在我们需要将该 List<Item>
按照 category 属性进行分组,最后统计每个分组下的数量,那么我们可以使用如下代码:
public class Item {
private int id;
private String category;
public Item(int id, String category) {
this.id = id;
this.category = category;
}
public int getId() {
return id;
}
public String getCategory() {
return category;
}
}
List<Item> list = new ArrayList<Item>(){{
add(new Item(1, "fruit"));
add(new Item(2, "fruit"));
add(new Item(3, "vegetable"));
add(new Item(4, "fruit"));
add(new Item(5, "vegetable"));
}};
Map<String, Long> result = list.stream()
.collect(Collectors.groupingBy(Item::getCategory, Collectors.counting()));
System.out.println(result);
以上代码的输出结果为:{vegetable=2, fruit=3}
,表示 List<Item>
中共有 2 个蔬菜,3 个水果。
分组计算总数
在 Java8 中,我们也可以通过 Collectors.groupingBy()
方法来实现对集合进行分组的操作。具体实现方法如下:
Map<String, Double> result = list.stream()
.collect(Collectors.groupingBy(Item::getCategory, Collectors.summingDouble(Item::getPrice)));
这段代码中,使用 stream()
方法将集合转换为流,然后使用 groupingBy()
方法将集合按照 Item
对象中的 category
属性进行分组,最后利用 summingDouble()
方法计算每组中属性 price
的总和。
其中,Map<String, Double>
表示分组之后的结果,其中 key 表示被分组的属性,value 表示该属性下的数量。
例如,如果我们有一个 Item
类,其中包含 id
、category
和 price
三个属性,现在我们需要将该 List<Item>
按照 category 属性进行分组,最后统计每个分组下的 price 属性的总和,那么我们可以使用如下代码:
public class Item {
private int id;
private String category;
private double price;
public Item(int id, String category, double price) {
this.id = id;
this.category = category;
this.price = price;
}
public int getId() {
return id;
}
public String getCategory() {
return category;
}
public double getPrice() {
return price;
}
}
List<Item> list = new ArrayList<Item>(){{
add(new Item(1, "fruit", 2.0));
add(new Item(2, "fruit", 4.5));
add(new Item(3, "vegetable", 1.5));
add(new Item(4, "fruit", 3.0));
add(new Item(5, "vegetable", 2.5));
}};
Map<String, Double> result = list.stream()
.collect(Collectors.groupingBy(Item::getCategory, Collectors.summingDouble(Item::getPrice)));
System.out.println(result);
以上代码的输出结果为:{vegetable=4.0, fruit=9.5}
,表示 List<Item>
中共有 2 个蔬菜,3 个水果,价格分别为 4.0 和 9.5。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java8 如何实现分组计算数量和计算总数 - Python技术站