首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用for循环转换代码,并在有if和else if循环时获取自定义对象。

使用for循环转换代码,并在有if和else if循环时获取自定义对象。
EN

Stack Overflow用户
提问于 2016-02-07 18:22:19
回答 2查看 101关注 0票数 0

大家好,我有以下java代码:

代码语言:javascript
复制
TimeZoneObj  timezone;

for( myObject obj: objectArr)
{
  if((obj.getName).equal("timeZone"))
  {
     timezone=db.getTmezone(obj.getId());
  }
}

我可以成功地将它转换为lambada,如下所示:

代码语言:javascript
复制
TimeZone timezone = Arrays.stream(objectArr)
.filter(obj -> obj.getName().equals("timeZone")) //filters 
.map(obj -> db.getTmezone(obj.getId())) 
.findAny().oeElse(new TimeZoneObj);

但是如果我在我的主要代码中还有其他的呢:

代码语言:javascript
复制
 TimeZoneObj  timezone;
  CalendarObj  calenda;

for( myObject obj: objectArr)
{
  if((obj.getName).equal("timeZone"))
  {
     timezone=db.getTmezone(obj.getId());
  }
  else if ((obj.getName).equal("calendar"))
  {
    calendar=db.getCalendar(obj.getId());
  }

}

有人能帮我把上面的代码转换成lambda吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-07 18:39:06

我不确定这就是你要找的东西,但你可以用两条溪流来做这个:

代码语言:javascript
复制
Stream<myObject> timezones = Arrays.stream(objectArr).filter(obj -> obj.getName().equals("timeZone"));
Stream<myObject> calendars = Arrays.stream(objectArr).filter(obj -> obj.getName().equals("calendar"));
TimeZone timezone = timezones.map(obj -> db.getTmezone(obj.getId())).findAny().get();
CalendarObj calendar = calendars.map(obj -> db.getCalendar(obj.getId())).findAny().get();
票数 2
EN

Stack Overflow用户

发布于 2016-02-07 19:15:30

要在@Adi Levin的回答中回答您的问题,是的,lambda不是万能的解决方案。

话虽如此,您可以尝试如下:

创建将数组元素对象映射到目标对象的方法:

代码语言:javascript
复制
    private Object fn(MyObj obj) {
        if (obj.getName().equals("timeZone")) {
            return db.getTmezone(obj.getId());
        } else if (obj.getName().equals("calendar")) {
            return db.getCalendar(obj.getId());
        } else {
            return null;
        }
    }

然后您可以使用它来收集所需的对象:

代码语言:javascript
复制
        List<Object> objects = Arrays
            .stream(objectArr)
            .map(this::fn)
            .filter(Objects::nonNull)
            .limit(2)
            .collect(toList());

所以你的最终列表最多有两个对象。但你还是要找出对象的类型,然后排序。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35257274

复制
相关文章

相似问题

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