当前位置: 首页 > 知识库问答 >
问题:

Java流-筛选到三个单独的列表/或groupBy中,但仅在枚举中

祁星阑
2023-03-14

我不确定是否可以在流中这样做。但对于for循环和多个IF,问题很简单,但希望转移到流。如果国家/地区在枚举中,我基本上希望将一个列表拆分为3个不同的列表,基于它们的国家/地区。

所以我有一个3值的枚举,即countries so->countries={algerial,India,Spain}。

我有一个say people对象列表,其中Person.getCountry返回他们的国家/地区。

我有3个结果列表要填充

List <String> algeriaList;
List <String> indiaList;
List <String> spainList;

如果列表在国家枚举中,我希望对其进行筛选,然后根据国家/地区将其拆分为3个不同的列表:[阿尔及利亚{}、印度{}和西班牙{}]

我知道只需使用for循环和if语句就可以完成,但我更愿意使用stream。

提前致谢

共有1个答案

温开畅
2023-03-14

首先筛选列表,使其仅包含您感兴趣的国家/地区的人员:

Set<CountryType> COUNTRIES_OF_INTEREST = Set.of(ALGERIA, INDIA, SPAIN);

peopleList.stream()
    .filter(p -> COUNTRIES_OF_INTEREST.contains(p.getCountry())

然后收集,按国家/地区分组:

    .collect(groupingBy(Person::getCountry));

这将为您提供map >

 类似资料:
  • 问题内容: 是否可以创建枚举值的ArrayList(并对其进行操作)?例如: 问题答案: 是的,绝对有可能,但是您必须这样做 然后,您可以将元素添加到:或。

  • 我有如下代码块: 在代码中,分号(;)被编译器标记为冗余。同时如果我使用 为什么在这两种情况下,分号都标记为多余?如何在Java中定义枚举列表的结尾?

  • Java8在收集器中提供了一个groupingBy函数,但它给出了元素的映射。我需要把地图转换成单个列表。 它还返回结果,但我想要的是对列表本身执行分组操作,这样我就不必重新分配它,因为在lambda表达式中不可能重新分配。 但是nodelistgrouped.values()返回Collection(List)

  • 我想知道是否有可能将不同流中的数据合并成一个流。通过合并,我的意思是将其添加到单独的列中,而不是添加到现有的列中。 到目前为止,我已经能够将数据收集到单独的地图中,如下面的示例所示。我认为我应该把这些地图合并成一张,但不确定如何去做,或者我是否做错了什么。 我做了一些搜索,在FlatMap、Concat等网站上找到了一些线索,但因为我对这条流还不熟悉 例如:列出数据-1

  • 问题内容: 我有一个枚举的类对象(我有一个),我需要获取此枚举表示的枚举值的列表。该静态函数有我需要什么,但我不知道怎么去从类对象访问它。 问题答案:

  • 我有一个列表,我想知道它是否包含除枚举类中的元素以外的任何其他元素。 我有这个工作: 这是可行的,但是我如何用流替换for循环,并且使它在更少的行中呢?