搜索平均值通过Stream API。

huangapple go评论69阅读模式
英文:

search for the average via streamapi

问题

如何使用API流来找到给定科目的所有学生的平均成绩?允许在Hashmap<String, String>映射中。

举例:键:“Ann”,值:“物理3.5 数学4.0 历史2.5”

类 学生 {

    私有 字符串 名称;
    私有 Map&lt;String, List&lt;Integer&gt;&gt; 分数;


    公共 学生(String 名称, Map&lt;String, List&lt;Integer&gt;&gt; 分数) {
.名称 = 名称;
.分数 = 分数;
    }

    公共 字符串 获取名称() {
        返回 名称;
    }

    公共 Map&lt;String, List&lt;Integer&gt;&gt; 获取分数() {
        返回 分数;
    }

    公共 静态 空 主方法(String[] 参数) {

        Map&lt;String, List&lt;Integer&gt;&gt; 分数Ann = 新 HashMap&lt;&gt;();
        分数Ann.put(&quot;物理&quot;, List.of(4, 4, 5));
        分数Ann.put(&quot;数学&quot;, List.of(2, 3, 4));
        分数Ann.put(&quot;历史&quot;, List.of(3, 3, 3));

        Map&lt;String, List&lt;Integer&gt;&gt; 分数Kate = 新 HashMap&lt;&gt;();
        分数Kate.put(&quot;物理&quot;, List.of(1, 2, 3));
        分数Kate.put(&quot;数学&quot;, List.of(5, 5, 3));
        分数Kate.put(&quot;历史&quot;, List.of(4, 2, 5));

        学生[] 学生们 = {学生(&quot;Ann&quot;, 分数Ann),
学生(&quot;Kate&quot;, 分数Kate)
        };
    }
}
英文:

how to use the api stream to find the average grade in a given subject for all students?
Allow in Hashmap<String, String > map

For example: key: &quot;Ann&quot;, value: &quot;Physics 3.5 Math 4.0 History 2.5&quot;

class Student {
private String name;
private Map&lt;String, List&lt;Integer&gt;&gt; marks;
public Student(String name, Map&lt;String, List&lt;Integer&gt;&gt; marks) {
this.name = name;
this.marks = marks;
}
public String getName() {
return name;
}
public Map&lt;String, List&lt;Integer&gt;&gt; getMarks() {
return marks;
}
public static void main(String[] args) {
Map&lt;String, List&lt;Integer&gt;&gt; markAnn = new HashMap&lt;&gt;();
markAnn.put(&quot;Physics&quot;, List.of(4, 4, 5));
markAnn.put(&quot;Mathematics&quot;, List.of(2, 3, 4));
markAnn.put(&quot;History&quot;, List.of(3, 3, 3));
Map&lt;String, List&lt;Integer&gt;&gt; markKate = new HashMap&lt;&gt;();
markKate.put(&quot;Physics&quot;, List.of(1, 2, 3));
markKate.put(&quot;Mathematics&quot;, List.of(5, 5, 3));
markKate.put(&quot;History&quot;, List.of(4, 2, 5));
Student[] students = {new Student(&quot;Ann&quot;, markAnn),
new Student(&quot;Kate&quot;, markKate)
};
}
}

答案1

得分: 3

根据我理解,您需要一个能找出学科平均分的方法。因此,您可以创建一个名为 findAverage 的方法:

public static Map<String, List<Integer>> findAverage(Map<String, List<Integer>> students){
    return students.entrySet()
            .stream()
            .collect(Collectors.toMap(
                    Map.Entry::getKey,
                    entry -> Collections.singletonList(
                            (int) entry.getValue().stream().mapToInt(Integer::intValue).average().orElse(0)
                    )
            ));
}

该方法返回带有以下值的 Map<String, List>:

{Mathematics=[4], History=[3], Physics=[2]}

然后您可以将其添加到您的集合中。

Student[] students = {new Student("Ann", findAverage(markAnn)),
                new Student("Kate", findAverage(markKate))
        };

请注意,可能会有一些情况下平均分可能是 4.3 或 3.5。所以如果您需要,您可以通过使用 mapToDouble() 而不是 mapToInt() 来随时将类型更改为 double。

英文:

As I understood you need a method that`s finds all averages in subjects for student. So you can create method like findAverage:

 public static Map&lt;String, List&lt;Integer&gt;&gt; findAverage(Map&lt;String, List&lt;Integer&gt;&gt; students){
return students.entrySet()
.stream()
.collect(Collectors.toMap(
Map.Entry::getKey,
entry -&gt; Collections.singletonList(
(int) entry.getValue().stream().mapToInt(Integer::intValue).average().orElse(0)
)
));
}

The method returns Map<String, List<Integer>> with value like:

{Mathematics=[4], History=[3], Physics=[2]}

than you can add it to your collection.

Student[] students = {new Student(&quot;Ann&quot;, findAverage(markAnn)),
new Student(&quot;Kate&quot;, findAverage(markKate))
};

Note that could be some situations when the average could be 4.3 or 3.5. So if you need it. You can change types to double whenever you want by using mapToDouble() instead mapToInt()

huangapple
  • 本文由 发表于 2023年4月20日 02:37:17
  • 转载请务必保留本文链接:https://go.coder-hub.com/76057835.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定