我有这个CasaDeBurrito课:
public class CasaDeBurritoImpl implements OOP.Provided.CasaDeBurrito {
private Integer id;
private String name;
private Integer dist;
private Set<String> menu;
private Map<Integer, Integer> ratings;
...
}
和此教授类:(应该是一个)
public class ProfessorImpl implements OOP.Provided.Profesor {
private Integer id;
private String name;
private List<CasaDeBurrito> favorites;
private Set<Profesor> friends;
private Comparator<CasaDeBurrito> ratingComparator = (CasaDeBurrito c1, CasaDeBurrito c2) ->
{
if (c1.averageRating() == c2.averageRating()) {
if (c1.distance() == c2.distance()) {
return Integer.compare(c1.getId(), c2.getId());
}
return Integer.compare(c1.distance(), c2.distance());
}
return Double.compare(c2.averageRating(), c1.averageRating());
};
private Predicate<CasaDeBurrito> isAvgRatingAbove(int rLimit) {
return c -> c.averageRating() >= rLimit;
};
public Collection<CasaDeBurrito>
filterAndSortFavorites(Comparator<CasaDeBurrito> comp, Predicate<CasaDeBurrito> p) {
return favorites.stream().filter(p).sorted(comp).collect(Collectors.toList());
}
public Collection<CasaDeBurrito> favoritesByRating(int rLimit) {
return filterAndSortFavorites(ratingComparator, isAvgRatingAbove(rLimit));
}
}
我想实现一个获取Profesor prof
的功能,并通过流将按ID排序的所有favorites
朋友的所有prof
集统一。结果,我希望通过评分(带有favoriteByRating)来收集所有最喜欢的CasaDeBurrito
餐厅。
例如:
public Collection<CasaDeBurrito> favoritesByRating(Profesor p) {
Stream ret = p.getFriends().stream()
.<*some Intermediate Operations*>.
.forEach(y->y.concat(y.favoritesByRating(0))
.<*some Intermediate Operations*>.
.collect(toList());
return ret;
}
我有这个CasaDeBurrito类:公共类CasaDeBurritoImpl实现OOP.Provided.CasaDeBurrito {private Integer id;私有字符串名称;私有Integer dist;私人Set <...>
[您想要a collection of all CasaDeBurrito favorites by friends sorted by name
,所以我想说Map<String, List<CasaDeBurrito>>
将是您所需要的,每个键都是朋友的名字,并且值是他喜欢使用CasaDeBurrito
方法使用的favoritesByRating
的列表,全部排序按名称(使用TreeMap
)
所以我不知道如何正确地提出问题,但是我设法将评论和答案与所需的内容联系起来。我按ID对朋友分类,并在他的注释here中创建了@Alex Faster分享的收藏流,并按照上面的建议将其展平。