热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Java8:过滤数组(NxM)以创建Map<String,HashSet<String>>

如何解决《Java8:过滤数组(NxM)以创建Map<String,HashSet<String>>》经验,为你挑选了1个好方法。



1> Stop ongoing..:

您可以使用第一项作为键转换String[][]为流String[],然后收集到地图,String[]其余作为集合的值.

public static Map> groupingDishes2(String[][] dishes) {
    return Arrays.stream(dishes)
        .collect(Collectors.toMap(
            arr -> arr[0],
            arr -> Arrays.stream(arr).skip(1).collect(Collectors.toCollection(HashSet::new))));
}

顺便说一句,我怀疑你真的需要一个Map>.将类型更改为更好Map>,然后实现也可以更简单.

public static Map> groupingDishes(String[][] dishes) {
    return Arrays.stream(dishes)
        .collect(Collectors.toMap(
            arr -> arr[0],
            arr -> Arrays.stream(arr).skip(1).collect(Collectors.toSet())));
}

或者甚至更好,正如@Holger建议的那样,一个更好的选择,因为"带有skiplimit不能很好地执行的流,也Collectors没有得到任何结果的初始容量提示":

public static Map> groupingDishes(String[][] dishes) {
    return Arrays.stream(dishes)
        .collect(Collectors.toMap(
            arr -> arr[0],
            arr -> new HashSet<>(Arrays.asList(arr).subList(1, arr.length))));
}


我的建议中没有中间数组.第一个建议从包含原始数组的*view*创建一个集合.第二个建议创建一个*包装*新数组的列表.这两种建议都比流操作更短,更有效.带有&#39;skip`和`limit`的流不能很好地执行,而且`Collector`s没有得到任何结果初始容量的提示.
推荐阅读
author-avatar
谜乱凡_134
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有