栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

分组对象Java 8

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

分组对象Java 8

Stream API的直接方法涉及2条Stream管道:

  • 第一个创建一个临时
    Map<Long, List<Long>>
    stackId
    questionIds
    。这是通过
    groupingBy(classifier, downstream)
    收集器完成的,在收集器中我们根据对进行分类,
    stackId
    并将具有相同值的值
    stackId
    映射到它们的
    questionId
    (和
    mapping
    ),并使用收集到列表中
    toList()
  • 第二个将该映射的每个条目转换为一个
    MyOtherClass
    实例,并将其收集到一个列表中。

假设您有一个构造函数

MyOtherClass(Long stackId, Collection<Long> questionIds)
,示例代码将是:

Map<Long, List<Long>> map =     list.stream()        .collect(Collectors.groupingBy( MyClass::getStackId, Collectors.mapping(MyClass::getQuestionId, Collectors.toList())        ));List<MyOtherClass> result =     map.entrySet()       .stream()       .map(e -> new MyOtherClass(e.getKey(), e.getValue()))       .collect(Collectors.toList());

使用StreamEx库,您可以在单个Stream管道中执行此操作。该库提供了

pairing
first
收集器。这样可以配对两个收集器,并对两个收集的结果执行整理器操作:

  • 第一个仅保留
    stackId
    分组元素中的第一个(根据构造,它们将全部相同)
  • 第二个将每个元素映射到它们
    questionId
    并收集到一个列表中。
  • 整理程序操作仅返回的新实例
    MyOtherClass

样例代码:

import static java.util.stream.Collectors.collectingAndThen;import static java.util.stream.Collectors.mapping;import static java.util.stream.Collectors.toList;import static one.util.streamex.MoreCollectors.first;import static one.util.streamex.MoreCollectors.pairing;// ...Collection<MyOtherClass> result =     StreamEx.of(list) .groupingBy(     MyClass::getStackId,     pairing(         collectingAndThen(mapping(MyClass::getStackId, first()), Optional::get),         mapping(MyClass::getQuestionId, toList()),         MyOtherClass::new     ) ).values();


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/419467.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号