gpt4 book ai didi

java - 如何使用给定的 String[][] 和预期的 String[][] 返回来计算平均成绩

转载 作者:行者123 更新时间:2023-12-02 01:10:37 24 4
gpt4 key购买 nike

我有一个二维数组作为输入,其中所有项目都是字符串。数据的格式为:姓名、年级。我应该编写一个方法,将此数组作为输入并返回 String[][] 显示不同的名称和平均成绩。所有这些都使用流。

{"Ann", "5"},
{"Tom", "6"},
{"Kate", "3"},
{"Albert", "2"},
{"Ann", "3"},
{"Tom", "1"},
{"Tom", "4"},
{"John", "2"}

到目前为止我所实现的是打印此输出:

Ann=4.0
Tom=3.6666666666666665
Kate=3.0
John=2.0
Albert=2.0

使用此代码:

Arrays.stream(input)
.collect(Collectors.groupingBy(a -> a[0], Collectors.averagingDouble(a -> Double.parseDouble(a[1]))))
.entrySet().forEach(System.out::println);

(我使用 system.out 只是为了检查输出,因为我被卡住了。)

输出需要按名称排序,成绩使用 DecimalFormat 格式化为小数点后两位。如果传递空输入,则应返回空数组(我想这可能是有关使用选项的提示)。

我寻找不同的解决方案来给我提供线索,但我完全陷入困境。我什至不确定我的输出是否是二维数组。而且它绝对没有排序或格式化。任何帮助表示赞赏。

最佳答案

收集到Map后,您可以通过按名称排序将每个条目流式传输并转换为String[]数组,然后使用toArray进行转换进入二维数组

String[][] output = Arrays.stream(input)
.collect(Collectors.groupingBy(a -> a[0], Collectors.averagingDouble(a -> Double.parseDouble(a[1]))))
.entrySet()
.stream()
.sorted(Map.Entry.comparingByKey())
.map(ar -> new String[] { ar.getKey(), String.format( "%.2f", ar.getValue()) })
.toArray(String[][]::new);

System.out.println(Arrays.deepToString(output)); //[[Ann, 5.00], [Tom, 3.50]]

如果输入数组可以为空,那么您必须在使用三元运算符流式传输数组之前进行检查

input = Objects.nonNull(input) ? input : new String[][] {{}};

您还可以使用过滤器检查内部数组对象

Arrays.stream(input)
.filter(inArray->Objects.nonNull(inArray) && inArray.length==2)
.collect(Collectors.groupingBy(a -> a[0], Collectors.averagingDouble(a -> Double.parseDouble(a[1]))))

关于java - 如何使用给定的 String[][] 和预期的 String[][] 返回来计算平均成绩,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59447926/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com