用于解构的Kotlin四倍,五倍等

我正在寻找一种干净的方式来在线创建可破坏的对象. kotlin.Pair和kotlin.Triple涵盖了很多用例,但有时还需要传递更多的对象.

一个示例用例是RX的zip函数,其中几个I / O调用的结果需要映射到另一个对象:

Single
    .zip(repositoryA.loadData(someId),repositoryB.loadData(someId),repositoryC.loadAll(),repositoryD.loadAll()),{ objectA,objectB,objectsC,objectsD -> /*some Kotlin magic*/ }
    )
    .map { (objectA,objectsD) -> /*do the mapping*/ }

我想弄清楚“一些Kotlin魔法”部分会发生什么.如果只有3个存储库,那就是

Triple(objectA,objectsC)

我是否需要为此创建一个新的数据类,以及任何n元组的情况,还是有另一种方法

解决方法

基本

让我们看看解构是如何工作的:

Kotlin为此定义了一个约定,即componentX()运算符函数是许多地方在Kotlin中使用的约定原则的一个例子.编译器使用这些componentX()函数来初始化解构声明中的变量.

例如,在Pair< A,B>中.这些功能如下:

operator fun component1(): A = first 

operator fun component2(): B = second

正如您所看到的,这些是operators,特别处理的功能.
这些componentX()函数可以由开发人员提供,并由编译器自动生成数据类.对也是这样的数据类btw.

回答

因此,只要您需要三个以上的数据,就可以继续使用数据类.

例如,一个MultiComponent类定义如下:

data class MultiComponent(val x: Int,val y: Int,val z: Int,val a: Int,val b: Int,val c: Int)

将被编译为具有函数component1(),component2(),…,component6()的类,并且可以在解构声明中使用:

val (q,w,e,r,t,z) = MultiComponent(1,2,3,4,5,6)

有关Kotlin约定和解构的更多详细信息,请参见this blog post(我的).

相关文章

ArrayList简介:ArrayList 的底层是数组队列,相当于动态数组。与 Java 中的数组相比,它的容量能动态增...
一、进程与线程 进程:是代码在数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位。 线程...
本文为博客园作者所写:&#160;一寸HUI,个人博客地址:https://www.cnblogs.com/zsql/ 简单的一个类...
#############java面向对象详解#############1、面向对象基本概念2、类与对象3、类和对象的定义格式4、...
一、什么是异常? 异常就是有异于常态,和正常情况不一样,有错误出错。在java中,阻止当前方法或作用域...
Collection接口 Collection接口 Collection接口 Collection是最基本的集合接口,一个Collection代表一组...