我有一個關于作為家譜實作的 Hashmap 的問題,它看起來像這樣。Hashmap 的鍵值是該人的名字,該值來自類 Person,該類再次包含名字、性別和帶有孩子的 Arraylist。孩子們再次來自型別的人。我想找到一種方法來創建一個函式,它應該回傳一個帶有兩個欄位的浮點陣列,在第一個欄位中,一個人從所有人中擁有的最大孩子數和所有人的孩子的平均值。應該是這樣的:
float[] describe(Map<String, Person> m) {
}
這是 Hashmap :(已經填充了鍵和值,并且它們和孩子之間也有鏈接)
Map<String, Person> allPersons = new HashMap<String, Person>();
這是類人:
class Person {
String name;
String sex;
List<Person> children;
public Person(String name, String sex) {
this.name = name;
this.sex = sex;
this.children = new ArrayList<Person>();
}
}
我的問題是如何遍歷 Hashmap 并獲得每個人擁有的孩子數量。
uj5u.com熱心網友回復:
使用 Stream API 可能會很方便,并且它Collectors::summarizingInt與children每個串列的大小有關Person:
float[] describe(Map<String, Person> m) {
IntSummaryStatistics stats = m.values()
.stream() // Stream<Person>
.collect(Collectors.summarizingInt(p -> p.getChildren().size()));
return new float[]{ stats.getMax(), (float) stats.getAverage()};
}
如果無法使用 Stream API,則可以在一個簡單的回圈中計算統計資訊:
float[] describe(Map<String, Person> m) {
float[] stats = {0.0f, 0.0f};
for (Person p : m.values()) {
int kids = p.getChildren().size();
stats[0] = Math.max(stats[0], kids);
stats[1] = kids;
}
stats[1] /= Math.max(1, m.values().size());
return stats;
}
uj5u.com熱心網友回復:
如果你不關心孫子的大小,你可以使用流 summaryStatistics
Map<String, Person> m = Map.of(...);
IntSummaryStatistics stats = m.values().stream()
.mapToInt(person -> person.children.size())
.summaryStatistics();
float[] s = {stats.getMax(), (float) stats.getAverage()};
迭代解決方案:
float max = 0, sum = 0;
for (Person person : m.values()) {
max = Math.max(person.children.size(), max);
sum = person.children.size();
}
float[] s = {max, sum / m.values().size()};
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/393627.html
上一篇:如何進行適當的物業管理
