【发布时间】:2020-05-18 13:11:49
【问题描述】:
我们今天在编程课上从流和 lambda 开始,我必须做一个练习。
第一个任务是编写一个计算列表中偶数平均值的方法。我已经编写了这段代码,但显然我没有使用流。
public static double average(List<Integer> list) {
double sum = 0;
int i = 0;
for (Integer integer : list) {
if (integer % 2 == 0) {
i++;
sum += integer;
}
}
return (sum / i);
}
编辑解决方案:
int sum = list.stream().filter(integer -> integer % 2 == 0).mapToInt(Integer::intValue).sum();
long count = list.stream().filter(integer -> integer % 2 == 0).count();
第二个任务是编写一个方法,选择所有以“a”开头(不区分大小写)或包含 3 个字符的字符串并将其更改为大写。 我的代码:
public static List<String> upperCase(List<String> list) {
for(int i = 0; i < list.size(); i++){
if(list.get(i).length() == 3 || Character.toString(list.get(i).charAt(0)).equalsIgnoreCase("a")){
list.set(i, list.get(i).toUpperCase());
}
}
return list;
}
编辑:解决方案:
public static List<String> upperCase(List<String> list) {
List<String> newListOfStrings = list.stream().map(string -> string.length() == 3 ||
Character.toString(string.charAt(0)).equalsIgnoreCase("a") ? string.toUpperCase() : string).collect(Collectors.toList());
return newListOfStrings;
最后一项任务是返回列表,但将“g”添加到偶数,将“u”添加到奇数。 我的代码:
public static String getString(List<Integer> list){
String s = "";
for(Integer integer : list){
if(integer % 2 == 0){
s += integer.toString() + "g,";}
else {
s += integer.toString()+ "u,";
}
}
return s.substring(0, s.length()-1);
}
编辑:解决方案:
public static String getString (List < Integer > list) {
String result = list.stream()
.map(integer -> integer % 2 == 0 ?
String.format("%d%s", integer, "g") : String.format("%d%s", integer, "u"))
.collect(Collectors.joining(","));
return result;
如果有人能告诉我第一个任务在流中的样子,我将不胜感激。我将自己尝试其他两个。
亲切的问候
【问题讨论】:
-
到目前为止你有什么尝试?
-
我想我必须这样开始:“list.stream().forEach ...我的问题是我不知道如何在流中实现 if 条件。
-
如果流中的条件是使用
filter()完成的。您是否阅读过文档,即Stream的javadoc,以了解您可以使用哪些方法? --- 问题被否决,因为它“没有显示任何研究工作”(引用否决按钮的工具提示)。 -
你是对的,我没有阅读文档。这对我来说是非常压倒性的。我现在有以下代码:
OptionalDouble sum = list.stream().filter(integer -> integer % 2 == 0).mapToDouble(Integer::intValue).average();有没有更好的方法来实现它?我想摆脱 OptionalDouble 因为任务是返回正常的双精度 -
请不要在 cmets 中添加更多信息,而是始终更新您的问题。
标签: java lambda java-stream