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

使用流API合并列表

赖翰
2023-03-14

我有以下情况

Map<Key, ListContainer> map; 

public class ListContainer {
  List<AClass> lst;
}

我必须合并所有列表lstMap映射的ListContainer对象。

public static void main(String[] args) {
   List<AClass> alltheObjectsAClass = map.values().stream(). // continue....    
}

知道如何使用Java8流API吗?

共有3个答案

薄龙光
2023-03-14

上面已经给出了答案,但这里有另一种方法可以采用。我找不到我改编这篇文章的原始帖子,但这里的代码是为了回答你的问题。如上所述,flatMap()函数是您希望在Java8中使用的函数。您可以将它放入一个实用程序类中,只需调用“RandomUtils.combine(list1,list2,…”你会得到一个包含所有值的列表。只需小心使用通配符——如果您想要一个不太通用的方法,您可以更改它。您还可以为集合修改它—在集合上使用flatMap()时,您只需小心,以避免由于集合接口的性质而导致equals/hashCode方法的数据丢失。

编辑-如果对Set接口使用这样的通用方法,并且碰巧使用了Lombok,请确保了解Lombok如何处理equals/hashCode生成。

  /**
    * Combines multiple lists into a single list containing all elements of
    * every list.
    * 
    * @param <T> - The type of the lists.
    * @param lists - The group of List implementations to combine
    * @return a single List<?> containing all elements of the passed in lists.
    */
   public static <T> List<?> combine(final List<?>... lists) {
      return Stream.of(lists).flatMap(List::stream).collect(Collectors.toList());
   }
暴德运
2023-03-14

备选方案:流。concat()

Stream.concat(map.values().stream(), listContainer.lst.stream())
                             .collect(Collectors.toList()
麹渊
2023-03-14

我认为flatMap()就是你要找的。

例如:

 List<AClass> allTheObjects = map.values()
         .stream()
         .flatMap(listContainer -> listContainer.lst.stream())
         .collect(Collectors.toList());
 类似资料:
  • 问题内容: 我有以下情况 我已经合并所有列表从从对象地图。 知道如何使用Java 8流API吗? 问题答案: 我想这就是您要寻找的。 例如:

  • 我有两个(或更多)

  • 我试图使用

  • 我有以下课程 我正在尝试按贡献者名称和角色名称对ResourceContributor列表进行排序。到目前为止,我得到的是: 我试过使用thenComparing,但还不知道如何使用它。

  • 我需要筛选我的对象列表: 以便将具有相同和的所有对象合并到具有以下属性的单个对象中: 作为所有值的和 作为所有值的字符串级联 所以结果是: Java 8中的溪流有可能做到吗? 我尝试了几种方法(例如,还使用),但我没有找到解决方案! 谢谢 编辑: 下面是我尝试的: 但由于某种原因,在计算过程中,我在上得到了,无论如何,我非常肯定这不是一个有效的解决方案。

  • 我有一个这样的方法: 此方法需要以如下字符串形式返回3个最昂贵项目的产品ID:“item1,item2,item3”。我应该只能使用溪流,我被困在这里了。我应该能够按值对项目进行排序,然后获得产品ID,但我似乎无法使其正常工作。 编辑: 产品ID位于入口类中