当前位置: 首页 > 面试题库 >

用Java-8流在'for'循环中替换if-else

景麒
2023-03-14
问题内容

我有下面的简单代码,我试图将其转换为功能样式

for(String str: list){
    if(someCondition(str)){
       list2.add(doSomeThing(str));
    }
    else{
        list2.add(doSomethingElse(str));
    }
}

是否可以轻松地用流替换此循环?我看到的唯一选择是使用两个不同的过滤条件在流上迭代两次。


问题答案:

听起来您可以只使用map以下条件:

List<String> list2 = list
    .stream()
    .map(str -> someCondition(str) ? doSomething(str) : doSomethingElse(str))
    .collect(Collectors.toList());

简短但完整的示例,将短字符串映射为小写,将长字符串映射为大写:

import java.util.*;
import java.util.stream.*;

public class Test {

    public static void main(String[] args) {
        List<String> list = Arrays.asList("abC", "Long Mixed", "SHORT");
        List<String> list2 = list
            .stream()
            .map(str -> str.length() > 5 ? str.toUpperCase() : str.toLowerCase())
            .collect(Collectors.toList());
        for (String result : list2) {
            System.out.println(result); // abc, LONG MIXED, short
        }
    }
}


 类似资料:
  • 问题内容: 我正在寻找将以下for循环替换为优雅的java 8流或lambda解决方案。有什么简洁高效的方法吗? 问题答案: 您的循环评估依赖于先前评估的结果。相当于 使用Stream API或lambda表达式并没有真正的简化。实际上,我更喜欢上面显示的变体,即使它变大而不是变小,因为它可以清楚地说明实际发生的情况(并且可以通过避免多次查找来提高效率)。 如果创建一个新的,它还允许您独立编程位置

  • 我有一个用于列表的for循环,它检查数据库中是否存在索引值。

  • 问题内容: 我正在尝试使用flatmap与Stream API进行嵌套循环,但似乎无法弄清楚。作为示例,我想重新创建以下循环: 我可以这样做,但这看起来很丑: Flatmap看起来很有希望,但是如何在外循环中访问变量? 输出: 问题答案: 您必须在阶段中创建所需的元素,例如:

  • 我在下面的代码中使用了嵌套的for循环,并且我有一些条件来中断内部的for循环,这提高了代码的性能。 现在,如何使用 Java 8 流来执行相同的逻辑?我想出了下面的代码: 在这里,我不能在java流中使用< code>break语句,所以我使用了< code>return语句,但它仍然运行内部循环,因为它不会中断内部循环,所以性能没有提高。

  • 问题内容: 在学习Java 8流和lambas时,我尝试用流替换以下嵌套的for循环: 该循环迭代“ ProvidedService”对象的列表,并针对每个对象循环访问“ Desk”对象的list属性,并将“ Id”字段提取到列表中。 我想出了以下使用stream的代码: 这是正确/最佳的方式吗?还是有没有第二个嵌套流的方法来执行此操作? 问题答案: 我可能会这样写:

  • 我想使用Java8流API转换以下代码 我带着这个出来了 但我不喜欢它,因为它对列表有副作用。 有没有另一种优雅的方式,从一个流中产生一个列表?