【问题标题】:Find element in ArrayList by conditions and return him or null by lambda按条件在ArrayList中查找元素,并通过lambda返回他或null
【发布时间】:2017-11-05 10:30:25
【问题描述】:

我有自定义对象的集合,我需要在我的函数中通过 id 属性找到正确的对象,然后返回他。如果找不到具有该 id 的元素,则函数返回 null。你能帮我修复我的代码吗?就是这样:

public MyObj find(long id) {
    return myList.stream()
            .filter(obj -> obj.getId() == id)
            .map(obj -> {
                return obj;
            })
            .findFirst()
            .orElse(null);

}

我有错误的冗余映射调用,带有映射功能的部分代码是灰色的。这有什么问题?谢谢

【问题讨论】:

  • myList.stream().filter(obj -> obj.getId() == id).findFirst().orElse(null).
  • 如果您经常这样做,使用Map 可能会更好;)。
  • 我对这个问题投了反对票,因为你在这里发布了代码,但没有说明它有什么问题。我们希望看到您期望代码做什么,为什么期望它这样做,它实际上在做什么,以及为什么它是错误的。请edit您的问题包含此信息,然后我将考虑撤回我的反对票。见:How to create a Minimal, Complete, and Verifiable example
  • @JoeC 我不同意。 OP显然努力解决这个问题。 OP 描述了问题所在“我有错误的冗余映射调用,并且带有映射功能的部分代码是灰色的”。我觉得这个问题很好。不是一个值得赞成的问题,但也不是一个值得反对的问题。
  • 你认为map(obj -> { return obj; }) 完成了什么??

标签: java arraylist lambda


【解决方案1】:

没有理由包含map 调用,因为它没有改变任何东西(它接受MyObj 实例并返回相同的实例)。

public MyObj find(long id) {
    return myList.stream()
            .filter(obj -> obj.getId() == id)
            .findFirst()
            .orElse(null);

}

【讨论】:

  • 值得注意的是,返回 Optional 会更符合习惯。
  • @BoristheSpider 好吧,OP 想要If element with that id won't found function return null
  • 是的,我知道 - 你有我的投票。但是一点点的教导不会有什么坏处……
猜你喜欢
  • 2021-01-15
  • 2021-09-12
  • 1970-01-01
  • 1970-01-01
  • 2018-01-27
  • 1970-01-01
  • 2021-09-12
  • 1970-01-01
  • 2021-06-23
相关资源
最近更新 更多