如何在流中使用If语句?

Dav*_* J. 5 java if-statement java-8 java-stream

我必须编写一个获取整数列表并将其转换为字符串的方法,如果它是偶数则在前面添加"e",如果不均匀则在"u"中添加,然后用","分隔它们.示例:输入:带有数字的列表1,2,4,3 - >输出:"u1,e2,e4,u3".问题是我必须使用lambda表达式和流来完成它,我不知道如何用它们区分均匀和不均匀的数字.

如果我这样做,我只能做偶数或不均匀的数字:

public static String getString(List<Integer> list){
    String s = list.stream()
            .map(Object::toString)
            .filter(i->Integer.parseInt(i)%2==0)
            .map(i->"g"+i)
            .collect(Collectors.joining(","));
    return s;

}
Run Code Online (Sandbox Code Playgroud)

如何在流中使用类似If语句的内容来决定是否在数字前加上"e"或"u"?

Era*_*ran 7

您可以将条件置于map操作中.最简单的方法是使用三元条件运算符.

顺便说一句,没有理由将其转换Integer为a String然后再将其解析为int.

public static String getString(List<Integer> list){
    return list.stream()
               .map(i->i%2==0?"e"+i:"u"+i)
               .collect(Collectors.joining(","));
}
Run Code Online (Sandbox Code Playgroud)

编辑:你也可以使用一个if-else声明,但这看起来不那么优雅:

public static String getString(List<Integer> list){
    return list.stream()
               .map(i -> {
                    if (i%2==0) {
                        return "e"+i;
                    } else {
                        return "u"+i;
                    }
                })
               .collect(Collectors.joining(","));
}
Run Code Online (Sandbox Code Playgroud)

  • 编辑太晚了...编辑本来是 - 因为你可以在块lambda中使用正常的`if`,但它会不那么方便. (2认同)