如何在流中使用If语句?

时间:2018-05-10 11:39:35

标签: java if-statement java-8 java-stream

我必须编写一个获取整数列表的方法,并通过添加" e"将其转换为字符串。在前面是一个数字,如果它是偶数或" u"如果它是不均匀的,然后用#34;,#34;分开它们。 示例:输入:带有数字的列表1,2,4,3 - >输出:" u1,e2,e4,u3和#34;。 问题是我必须使用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;

}

我如何在流中使用类似If语句的内容来决定是否放置&#34; e&#34;或&#34; u&#34;在数字前面?

1 个答案:

答案 0 :(得分:7)

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

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

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

编辑:您也可以使用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(","));
}