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

从Java8映射操作返回空元素

郎祯
2023-03-14

使用Java8流,当输入整数没有输出时,映射列表 的最佳方法是什么?

简单地返回NULL?但现在我的输出列表大小将小于我的输入大小...

    List<Integer> input = Arrays.asList(0,1,2,3);
    List<Integer> output = input.stream()
                                .map(i -> { 
                                    Integer out = crazyFunction(i);
                                    if(out == null || out.equals(0))
                                        return null;
                                    return Optional.of(out);
                                    })
                                .collect(Collectors.toList());

共有1个答案

松俊才
2023-03-14

我不明白为什么你(和所有的答案)把它弄得这么复杂。您有一个映射操作和一个筛选操作。所以最简单的方法就是一个接一个地应用这些操作。并且除非您的方法已经返回了optional,否则不需要处理optional

input.stream().map(i -> crazyFunction(i))
              .filter(out -> out!=null && !out.equals(0))
              .collect(Collectors.toList());

它可以简化为

input.stream().map(context::crazyFunction)
              .filter(out -> out!=null && !out.equals(0))
              .collect(Collectors.toList());

但您似乎有一个更理论化的问题,即要生成什么样的列表?一个是带有缺省值的占位符,还是具有与输入列表不同的大小。

 类似资料:
  • 我有以下两门课: : : 我希望进行流操作,以便: 将映射到中的 的和分别合并到和中,对于所有具有相同id的s 为此,我编写了以下一段代码: 它的工作和输出如下: 但我相信有一种更好的方式可以达到同样的效果。任何一个指针都很好。

  • 我试图使用MapStruct在dto和实体对象之间映射convert,但是生成的映射器实现只返回空的映射对象。 BeermapperImpl 任何人都可以提供我的代码可能出错的地方?谢谢!

  • 1)做这件事的正确方法是什么?我做错了什么? 2)流是线程安全的吗?我正在多线程环境中工作,所以我是否应该使用返回TRAAD安全集合的收集器?

  • 我正在尝试使用流将一个列表映射到另一个列表。 原始列表的某些元素无法映射。也就是说,映射函数可能无法找到合适的新值。 null 对更好的方法的建议?或者我应该把溪流全部挖开,用好的旧循环?

  • 有一个简单的: 以及任务对象的列表。如何通过使用获得每个作为的列表。我试过这个: 但它返回

  • 问题内容: 我正在使用PostgreSQL 9.3。 我想复制一些数据库记录。由于我正在为表使用自动递增的pk ID,因此我想将ID映射从生成的重复记录ID找回原始记录。例如,假设我有一个包含2条记录的表: 使用SQL: 我希望看到类似的映射: 关于如何填写上面的问号以使其起作用的任何想法吗?非常感谢! 问题答案: 这对于来说会更简单,在此子句中可以看到加入到更新中的其他行: 仅使用SQL返回UP