如何在没有并行负担的情况下使用Java reduce来简单地将对象简化为一个对象?

chubbsondubs:

因此,我尝试使用reducea List<String>并创建一个Map<String,List<Integer>>map的键,它是原始键的成员List,而值是List该键发生的索引的a 通常,对于大多数其他语言,使用reduce,inject,fold等,这是一个非常简单的操作。例如,在Javascript中,您可以执行以下操作:

let mappings = someStrings.reduce( function( mappings, val, index ) {
    if( !mappings[val] ) {
        mappings[ val ] = [];
    }
    mappings[ val ].push( index );
    return mappings;
}, {});

但是,我发现在Java中进行还原是相当复杂的,因为Java认为应该编写功能操作,以便可以“透明地”并行化这些功能操作,但是这样的简单情况却增加了额外的开销。在Java中,我不得不编写一些痛苦的东西:

List<String> headers = ...
Map<String,List<Integer>> mappings = IntStream.range(0, headers.size())
    .map( i -> new Pair<String,Integer>( headers.get(i), i ) )
    .reduce( new HashMap<>(), ( mapping, pair ) -> {
        if( !mappings.contains( pair.getFirst() ) ) {
            mappings.put( pair.getFirst(), new ArrayList<String>() );
        }
        mappings.get( pair.getFirst() ).add( pair.getSecond() );
        return mappings;
    }, ( x, y ) -> x );

如果我被迫实际合并x和y,那么在合并复杂对象的情况下,对于简单的单线程情况,它将变得非常复杂。这确实显示了Java做出的设计决策所带来的复杂性。

我的问题是我是否缺少有关减少的内容?有没有一种方法可以将并行设计简化为双线程设计,使之更简单(我只是看不到)?并行的选项很好,但是大多数时候我对简单的单线程reduce感到满意。

霍尔格:

您的操作看起来很复杂,原因有两个。首先,您正在执行不必要的中间操作映射到对类型。其次,您使用了错误的工具来完成工作。代替减少,您需要Mutable Reduction

完整的操作可以写成

Map<String,List<Integer>> mappings = IntStream.range(0, headers.size()).boxed()
    .collect(Collectors.groupingBy(headers::get));

又见groupingBy收藏家

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

我如何在没有标签对象的情况下使用Beautiful汤取消值

如何在没有警告的情况下强制转换java.lang.Class <?>类型的对象?

使用流将集合简化为另一个类型的单个对象

如何将对象列表简化为另一个列表?

如何在没有`foreach`和没有`for`的情况下使用PHP手动迭代数组/对象

如何在没有第二个参数的情况下使用insertBefore()?

如何在没有外键的情况下使用DRF与另一个表建立关系

如何在不互相引用的情况下将对象复制到另一个对象?

在没有父对象名称的情况下将对象列表序列化为JSon

如何在猫鼬中没有一个对象的情况下更新架构

我如何在没有类对象的情况下使用json序列化一个int值?

通过使用对象数组(递归地与子对象)来构建一个对象

如何将对象数组简化为一个对象?

如何在JavaScript中将两个依赖数组简化为一个对象?

如何在没有集合的情况下从列表中查询一个对象?

如何在没有对象的情况下将对象方法作为参数传递

如何在不使用Intent的情况下将对象从一个活动传递到另一个活动

如何在没有root的情况下“监禁”一个进程?

如何在没有参考的情况下使用另一个项目中的方法

如何在没有箭头键的情况下获取上一个命令

如何在没有构建系统的情况下将 babel 与简单的 HTML 文件一起使用?

如何在没有调用对象的情况下使用在另一个类中定义的方法?

如何在不使用 Javascript 或 jQuery 添加属性的情况下将对象的属性复制到另一个对象中?

如何在没有 foreach 的情况下使用 linq 过滤嵌套对象?

如何在没有@BsonDiscriminator 的情况下使用 mongodb 和 lombook 中的不可变对象

如何在不使用结构修改原始对象的情况下将对象存储在另一个对象中?

如何在 Django 中使用一个查询在没有 FK 的情况下检索相关实例

如何在没有初始化程序的情况下使用 TopLevel 对象?

如何在没有归一化因子的情况下使用 search_analyzer?