首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于流匹配准则的返回元素

基于流匹配准则的返回元素
EN

Stack Overflow用户
提问于 2021-07-27 21:23:02
回答 2查看 1.4K关注 0票数 1

我有一个自定义对象AllData的列表。我想从这个列表中返回一个元素,它与一个特定的标准(widgetId = 58)相匹配。如何使用流/筛选器/集合返回与我的条件匹配的单个AllData对象。我已经尝试了下面的方法,但是我得到了NoSuchElementException。

代码语言:javascript
复制
AppDatabase db = AppDatabase.getDbInstance(MyContext.getContext());
List<AllData> allDataList = db.allDataDao().getAllDataList();
AllData allData = allDataList.stream().findFirst().filter(e -> e.getMyTicker().getWidgetId() == 58).get();
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-07-27 21:33:59

您应该首先filter列表和使用findFirst

代码语言:javascript
复制
AllData allData = allDataList.stream()
       .filter(e -> e.getMyTicker().getWidgetId() == 58)
       .findFirst().get();

我建议使用orElse来避免NoSuchElementException --如果在可选中没有值的话。

票数 2
EN

Stack Overflow用户

发布于 2021-07-27 23:54:44

如果什么都不返回会发生什么?您希望返回一个默认值,并在filter()之后调用findFirst()。给你:

代码语言:javascript
复制
    public static void main(String[] args) {
    List<MyObject> list = new ArrayList<>();
    MyObject object = list.stream().filter(e -> e.getMyTicker().getWidgetId() == 58).findFirst().orElse(null);
}

public static class MyObject {
    private Ticker myTicker;

    public Ticker getMyTicker() {
        return myTicker;
    }
}

public static class Ticker {
    private int widgetId;

    public int getWidgetId() {
        return this.widgetId;
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68551925

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档