如何用对象流统一对象的集合

问题描述 投票:-1回答:2

我有这个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 <...>

java collections java-stream flatten
2个回答
0
投票

[您想要a collection of all CasaDeBurrito favorites by friends sorted by name,所以我想说Map<String, List<CasaDeBurrito>>将是您所需要的,每个键都是朋友的名字,并且值是他喜欢使用CasaDeBurrito方法使用的favoritesByRating的列表,全部排序按名称(使用TreeMap


0
投票

所以我不知道如何正确地提出问题,但是我设法将评论和答案与所需的内容联系起来。我按ID对朋友分类,并在他的注释here中创建了@Alex Faster分享的收藏流,并按照上面的建议将其展平。

© www.soinside.com 2019 - 2024. All rights reserved.