大家好,我有以下java代码:
TimeZoneObj timezone;
for( myObject obj: objectArr)
{
if((obj.getName).equal("timeZone"))
{
timezone=db.getTmezone(obj.getId());
}
}我可以成功地将它转换为lambada,如下所示:
TimeZone timezone = Arrays.stream(objectArr)
.filter(obj -> obj.getName().equals("timeZone")) //filters
.map(obj -> db.getTmezone(obj.getId()))
.findAny().oeElse(new TimeZoneObj);但是如果我在我的主要代码中还有其他的呢:
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吗?
发布于 2016-02-07 18:39:06
我不确定这就是你要找的东西,但你可以用两条溪流来做这个:
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();发布于 2016-02-07 19:15:30
要在@Adi Levin的回答中回答您的问题,是的,lambda不是万能的解决方案。
话虽如此,您可以尝试如下:
创建将数组元素对象映射到目标对象的方法:
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;
}
}然后您可以使用它来收集所需的对象:
List<Object> objects = Arrays
.stream(objectArr)
.map(this::fn)
.filter(Objects::nonNull)
.limit(2)
.collect(toList());所以你的最终列表最多有两个对象。但你还是要找出对象的类型,然后排序。
https://stackoverflow.com/questions/35257274
复制相似问题