在Java中显示列表流中列表的元素(无冗余)

问题描述 投票:0回答:1

我有一份名单,其中包括: 爱好列表{游戏、滑雪、足球...) 高度 重量 出生年份

我想显示 1999 年出生的 20 个最大个体中最重的 5 个的爱好列表(没有冗余)

我有一个流列表:

List<String> question7 = ListPerson.stream()
     .filter( p -> p.getDateDeNaissance().toInstant().atZone(ZoneId.systemDefault()).toLocalDate().getYear() == 1999)
     .sorted(Comparator.comparingDouble(p -> ((person) p).getHeight()).reversed())
     .limit(20)
     .sorted(Comparator.comparingDouble(p -> ((Individu) p).getWeight()).reversed())
     .limit(5)
     .map(s->s.getListHobbys())            
     .flatMap(Collection::stream)   
     .collect(Collectors.toList());

但是我没有我想要的东西,还有多余的东西。有人可以问我谁能做到吗

java list java-stream
1个回答
0
投票

一些建议。

您的整体逻辑是正确的(尽管我认为是第二种错字)。 您使用

Individu
,它应该是
Person
或任何您的班级。

但是您可以指定一个见证人并按如下方式执行操作,而不是强制转换比较器:

List<String> question7 = listPerson.stream()
        .filter( p -> p.getDateDeNaissance().toInstant()
                .atZone(ZoneId.systemDefault())
                .toLocalDate().getYear() == 1999)
        .sorted(Comparator.<Person>comparingDouble(p->p.getHeight())
                .reversed())
        .limit(20)
        .sorted(Comparator.<Person>comparingDouble(p->p.getWeight())
                .reversed())
        .limit(5).map(p->p.getListHobbys())
        .flatMap(Collection::stream).distinct().toList();

或者您可以通过指定方法引用来消除见证人和 lambda

List<String> question7 = listPerson.stream()
        .filter( p -> p.getDateDeNaissance().toInstant()
                .atZone(ZoneId.systemDefault())
                .toLocalDate().getYear() == 1999)
        .sorted(Comparator.comparingDouble(Person::getHeight)
                .reversed())
        .limit(20)
        .sorted(Comparator.comparingDouble(Person::getWeight)
                .reversed())
        .limit(5).map(Person::getListHobbys)
        .flatMap(Collection::stream).distinct().toList();

但是你的做法并没有错,选择权在你。

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