当前位置: 首页 > 知识库问答 >
问题:

将for循环和if条件转换为流、过滤、收集

计均
2023-03-14

我试图将此for循环和if条件转换为Java流,过滤和收集

final List<Optional<String>> students = listofstudents.get();

final List<String> finalist = new ArrayList<>(students.size());

for(int i=0; i<students.size(); i++) {
    if(students.get(i).isPresent()) {
        finalist.add(students.get(i).get());
    }
    else {
        finalist.add(null);
    }
}

我试过这个:

List<String>result = null;

students.stream()
        .filter(e -> e.isPresent())
        .map(e->result.add(e))
        .orElse(result.add(null)
        .collect(Collectors.toList());

然而,这是完全错误的。我没能按预期工作

有人能告诉我,我应该如何使用流,过滤,收集?

共有1个答案

毕黎昕
2023-03-14

映射时可以使用三元条件运算符:

List<String> result = students.stream()
                              .map(op -> op.isPresent()? op.get() : null)
                              .collect(Collectors.toList());

或者正如@Mark Rotteveel正确评论的那样:

students.stream().map(op -> op.orElse(null)).collect(Collectors.toList());
 类似资料:
  • 我已经开始使用Java8,并尝试将代码中的一些循环和旧语法转换为lambdas和streams。 举个例子,我试图转换这个time和for循环到流,但我没有得到它的权利: 我想知道是否有可能将上面的示例转换为单个流,其中for循环内部有一个而循环。

  • 我已经了解了一些关于流的知识,并且知道它们可以用来代替循环。对于这个玩具示例,我使用一个图形数据库来存储一组字符串。数据库将它们存储为顶点。我想检索这些顶点,并将它们转换为字符串,而是使用流。每个顶点都有一组性质;我给它一个键,它返回一个值。如果一个顶点具有我正在寻找的属性,我将它添加到列表中。如果没有,我存储顶点ID。 我有一个for循环,但我不确定如何使用流来代替。代码如下:

  • 我想翻译方法做完全相同的,但使用流和过滤,如果必要的话 我正在学习使用流,所以我不知道如何实现这一点。到目前为止,我已经做了以下工作: 很明显,我得到了一个字符串列表,但是我不知道如何将它减少到只有一个元素(该列表没有超过一个元素),如果没有找到元素,就会得到null。 此外,我得到了,我应该返回相应的TestState,而不是它的。

  • 我需要将这段包含多个for循环和if语句的代码转换为Java 8流: 我需要循环遍历一个数组的名称,并返回一个仅包含不重复的名称的列表。如果一个名字出现不止一次,我需要将它从最终列表中删除。 输入->[“Tom”,“George”,“Tom”,“Mike”,“Brian”] 输出->[“George”,“Mike”,“Brian”] 有谁能帮忙吗?

  • 问题内容: 是否每个递归函数都有一个等效的for循环?(两者都达到相同的结果)。 我有这个递归函数: 假设单词是Set [],并且单词[i] =单词长度为i的集合。 我想做的是:使用一个单词(例如,“ stackoverflow”,没有空格)启动递归,我试图查找该单词是否可以切成子单词(“ stack”,“ over”,“ flow”) ..子词的最小长度为3,并且假设长度为i的子词在Set wo

  • 我最近学习了Java流,并尝试通过转换我以前的一些代码片段来实践一些流特性。程序中的以下传统for循环是将原始数组中的索引及其反向字符串存储到映射中。 然而,我很难使用纯流实现同样的事情。我认为我的问题是如何同时跟踪索引和反向字符串。从传统的for循环中可以看到,我正在将字符串转换为stringBuilder,然后将其反转,然后转换回字符串。最后我把索引和字符串映射。但是我想不出用纯流来跟踪所有这