我有一个ArrayList <Item>,我想做一个函数,用相同的代码汇总所有项目的数量,然后显示所有具有数量的项目.
public class Item{
private String code;
private int quantity;
public Item(String InputCode, int InputQuantity)
{
this.code= InputCode;
this.quantity = InputQuantity;
}
}
Run Code Online (Sandbox Code Playgroud)
假设我做了以下事情
List<Item> items = new ArrayList<Item>();
items.add(new Item("A01", 1));
items.add(new Item("A02", 1));
items.add(new Item("B05", 2));
items.add(new Item("A01", 3));
items.add(new Item("Z02", 2));
items.add(new Item("A02", 2));
display();
Run Code Online (Sandbox Code Playgroud)
那么期望的输出是
A01 4
A02 3
B05 2
Z02 2
Run Code Online (Sandbox Code Playgroud)
我不知道,有人能给我一些提示吗?
Jor*_*nee 10
你可以用流做到这一点:
import static java.util.stream.Collectors.*;
...
Map<String, Integer> map = items.stream()
.collect(groupingBy(Item::getCode,
summingInt(Item::getQuantity)));
Run Code Online (Sandbox Code Playgroud)
假设你的班级有这些吸气剂:
public class Item {
...
public String getCode() {...}
public int getQuantity() {...}
}
Run Code Online (Sandbox Code Playgroud)
这将把项目代码,A01,A02等,它们的数量各自的总和.
您可以使用以下代码获取按代码排序的输出:
map.entrySet().stream()
.sorted(Map.Entry.comparingByKey())
.forEachOrdered((e) -> System.out.println(e.getKey() + " " + e.getValue()));
Run Code Online (Sandbox Code Playgroud)
注意:使用.forEachOrdered(System.out::println)相反,产生类似的输出A01=4,这与您给出的示例几乎相同,并且比上面的更简单.
| 归档时间: |
|
| 查看次数: |
1952 次 |
| 最近记录: |