【问题标题】:Display elments (without redundancy) of list in list stream in Java在Java中的列表流中显示列表的元素(无冗余)
【发布时间】:2022-01-11 03:52:59
【问题描述】:

我有一份名单: 爱好清单{游戏,滑雪,足球......) 高度 重量 出生年份

我想显示 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());

但我没有我想要的,而且有冗余。有人可以问我谁能做到这一点

【问题讨论】:

  • 我推荐使用Stream::distinct
  • 我这样解决了.flatMap(Collection::stream).distinct()
  • 随便叫吧。这是一个中间流操作。
  • 是的,谢谢

标签: java list stream java-stream


【解决方案1】:

一些建议。

您的整体逻辑是正确的(尽管我认为这是第二种错误)。你使用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();

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-19
    • 2021-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多