Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用streams和lambda编写此方法?_Java_Lambda_Java Stream - Fatal编程技术网

Java 如何使用streams和lambda编写此方法?

Java 如何使用streams和lambda编写此方法?,java,lambda,java-stream,Java,Lambda,Java Stream,今天在编程课上我们从streams和Lambda开始,我要做一个练习 第一个任务是编写一个方法,计算列表中偶数的平均值。我已经编写了这段代码,但显然我没有使用流 public static double average(List<Integer> list) { double sum = 0; int i = 0; for (Integer integer : list) { if (integer % 2 == 0) {

今天在编程课上我们从streams和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);
}
第二个任务是编写一个方法,选择所有以“a”(不区分大小写)开头或有3个字符的字符串,并将其更改为大写。 我的代码:

公共静态列表大写(列表){
对于(int i=0;i
编辑:解决方案:

int sum = list.stream().filter(integer -> integer % 2 == 0).mapToInt(Integer::intValue).sum();
long count = list.stream().filter(integer -> integer % 2 == 0).count();
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;
公共静态列表大写(列表){
List newListOfStrings=List.stream().map(字符串->字符串.length()==3||
Character.toString(string.charAt(0)).equalsIgnoreCase(“a”)?string.toUpperCase():string).collect(collector.toList());
返回newlistofstring;
最后一个任务是返回列表,但将“g”添加到偶数,将“u”添加到奇数。 我的代码:

公共静态字符串getString(列表){
字符串s=“”;
用于(整数:列表){
如果(整数%2==0){
s+=integer.toString()+“g,;}
否则{
s+=integer.toString()+“u”;
}
}
返回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;
公共静态字符串getString(ListList){
字符串结果=list.stream()
.map(整数->整数%2==0?
String.format(“%d%s”,整数,“g”):String.format(“%d%s”,整数,“u”))
.collect(收集器。连接(“,”);
返回结果;
如果有人能告诉我第一个任务是如何处理streams的,我会非常感激。我会自己尝试另外两个任务

问候

第一个任务是编写一个方法,计算列表中偶数的平均值

重点是更改装箱的
流
第一个任务是编写一个方法,计算列表中偶数的平均值



关键是要更改装箱的
流到目前为止您尝试了什么?我想我必须这样开始:“list.stream().forEach…我的问题是我不知道如何在流中实现if条件。流中的if条件是使用
filter()完成的
。您是否阅读了文档,即的javadoc,以了解哪些方法可供您使用?---向下投票的问题,因为它“没有显示任何研究成果”(引用向下投票按钮的工具提示)。你是对的,我没有阅读文档。这对我来说是非常困难的。我现在有以下代码:
optionalduble-sum=list.stream().filter(integer->integer%2==0)。mapToDouble(integer::intValue)。average()
有更好的实现方法吗?我想去掉OptionalDouble,因为它的任务是返回一个正常的Double。请不要在评论中添加更多信息,始终更新您的问题。到目前为止您尝试了什么?我想我必须这样开始:“list.stream().forEach…我的问题是我不知道如何在流中实现if条件。流中的if条件是使用
过滤器()完成的。
。您是否阅读了文档,即的javadoc,以查看您可以使用哪些方法?---问题被否决,因为它“没有显示任何研究工作”(引用向下投票按钮的工具提示)。你是对的,我没有阅读文档。这对我来说非常重要。我现在有以下代码:
optionalduble-sum=list.stream().filter(integer->integer%2==0)。mapToDouble(integer::intValue)。average()有更好的实现方法吗?我想去掉可选的Double,因为任务是返回一个普通的Double。请不要在评论中添加更多信息,始终更新您的问题。a(而不是
StringBuilder
)怎么样最后一个例子?@OleV.V.:我在考虑这个问题,但是你必须在循环中用
“g”
“u”
连接一个整数(使用
String.format
),因为调用
StringJoiner::add
会放置一个新的定界符。你能举个例子吗?因为我如此喜欢流,所以我只做
list.stream().mapToInt(Integer::valueOf).mapToObj(i->i%2==0?i+“g”:i+“u”).collect(Collector.joining(“,”)
)。请随意反对。:-
mapToInt
,您可以直接映射到字符串(输入列表是
list
,因此:
list.stream().map(i->i%2==0?i+“g”:i+“u”).collector.joining(“,”)
+
处理转换。此外,我想避免在第一种情况下使用
+
进行字符串连接。我是否遗漏了什么?品味问题。我喜欢连接。也许如果我们更好地理解OP为什么需要该输出,我们会更好地了解它是好是坏。PS我不喜欢puttin但是,在连接中,首先是
int
。我可能会执行
“+I+”g
,甚至是
字符串。valueOf(I)+'g'
。最后一个是a(而不是
StringBuilder
)怎么样?@OleV.V:我在考虑这个问题,但是你必须将一个整数连接到
“g”
“u”
在循环内部(使用
String.format
),因为调用
StringJoiner::add
放置了一个新的分隔符。你能提供一个例子吗?因为如此喜欢流,我只需要做
list.stream().mapToInt(Integer::valueOf).mapToObj(I->I%2==0?I+“g”:I+“u”).collector.joining(“,”)
。请随意反对。:-
mapToInt
不需要,您可以直接映射到字符串(输入列表是
list
,因此:
list.stream().map(i
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;
double average = list.stream().mapToInt(i -> i).average().getAsDouble;
List<String> newListOfStrings = listOfStrings.stream()
    .map(string -> string.length() == 3 || string.startsWith("a") ? 
                   string.toUpperCase() : string)
    .collect(Collectors.toList());
String result = list.stream()
    .map(integer -> integer % 2 == 0 ? integer + "g" : integer + "u")
    .collect(Collectors.joining(","));

// I find String.format better than using +
String result = list.stream()
        .map(integer -> integer % 2 == 0 ?
            String.format("%d%s", integer, "g") : String.format("%d%s", integer, "u"))
        .collect(Collectors.joining(","));
StringBuilder sb = new StringBuilder();
for (Integer integer: list) {
    sb.append(integer);
    if (integer % 2 == 0) {
        sb.append("g,");
    } else {
        sb.append("u,");
    }
}
String result = sb.toString().substring(0, sb.length() - 1);
List<String> newList = new ArrayList<>();
for (Integer integer: list) {
    String toAdd = integer % 2 == 0 ? 
        String.format("%d%s", integer, "g") : 
        String.format("%d%s", integer, "u");
    newList.add(toAdd);
}
String result = String.join(",", newList);