场景:当在一个方法中, 你需要返回几个对象,这几个对象的类型一致,你可以返回一个数组;如果几个对象的类型不同呢,当然你可以返回一个Object[]数组,可是这样在使用结果数组的时候,就需要强转对象的类型,会导致类型不安全;也可以定义一个dto,当多个场景下需要使用的不同,需要定义多个dto,这样会类爆炸,而且重用率极低;在非常接近Java语言的Scala里有元组的定义:val t = (1, 3.14, "Fred"),就是一个不同类型的数据放到一个线性集合里,在Java里我们可以模拟出一个类似的结构,以适合上面的场景
demo:
Java代码
-
abstract
class
Tuple {
-
-
public
static
void
main (String[] args) {
-
Tuple tuple2 = Tuple.<String, Integer>of(
"hello"
,
1
);
-
Tuple tuple3 = Tuple.<String, Integer, String>of(
"hello"
,
1
,
"hi"
);
-
System.out.println(tuple2._1().get() +
"|"
+ tuple2._2().get());
-
System.out.println(tuple3._1().get() +
"|"
+ tuple3._2().get() +
"|"
+ tuple3._3().get());
-
-
}
-
-
public
static
<E, T> Tuple of (E e, T t) {
-
return
new
Tuple2(e, t);
-
}
-
-
public
static
<E, T, K> Tuple of (E e, T t, K k) {
-
return
new
Tuple3(e, t, k);
-
}
-
-
public
abstract
<E> Optional<E> _1 ();
-
-
public
abstract
<E> Optional<E> _2 ();
-
-
public
abstract
<E> Optional<E> _3 ();
-
-
}
-
-
class
Tuple2<E, T>
extends
Tuple {
-
private
E e;
-
private
T t;
-
-
Tuple2 (E e, T t) {
-
this
.e = e;
-
this
.t = t;
-
}
-
-
@Override
-
public
Optional<E> _1 () {
-
return
Optional.of(e);
-
}
-
-
@Override
-
public
Optional<T> _2 () {
-
return
Optional.of(t);
-
}
-
-
@Override
-
public
<E> Optional<E> _3() {
-
return
Optional.absent();
-
}
-
}
-
-
class
Tuple3<E, T, K>
extends
Tuple {
-
private
E e;
-
private
T t;
-
private
K k;
-
-
Tuple3 (E e, T t, K k) {
-
this
.e = e;
-
this
.t = t;
-
this
.k = k;
-
}
-
-
public
Optional<E> _1 () {
-
return
Optional.of(e);
-
}
-
-
public
Optional<T> _2 () {
-
return
Optional.of(t);
-
}
-
-
public
Optional<K> _3 () {
-
return
Optional.of(k);
-
}
-
}
上面的代码中定义了三个类,父类为抽象类Tuple,此父类就是定义了一些模板方法,方法名有点不像Java方法名的命名规范,那是模仿scala里的方法命名,Tuple类没有其他作用,只是提供静态方法,创建Tuple的之类充当容器,提供多个容器的入口;
Tuple2<E,T>可以充当两个对象的容器,该容器内保持两个对象的引用,通过方法_1(), _2()获取第一个和第二个对象的值,在此并没有直接返回对象,而是返回一个Optional对象,这是提醒使用返回值的方法做非Null检查;
Tuple3<E,T,K>原理类似Tuple2,类似的可以做针对4个以及更多的对象容器,作为方法返回参数类型
import org.apache.spark.api.
java
.
Java
PairRDD;
import org.apache.spark.api.
java
.
Java
SparkContext;
import org.apache.spark.api.
java
.
Java
RDD;
import org.apache.spark.SparkConf;
import org.apache.spark.api.
java
.function.PairFunction;
import scala.
Tuple2
...
Java
中的
元组
Tuple
文章目录
Java
中的
元组
Tuple
1. 概念2. 使用2.1 依赖Jar包2.2 基本使用2.2.1 直接调用2.2.2 自定义工具类2.2.3 示例代码
1. 概念
Java
中的
Tuple
是一种数据结构,可存放多个元素,每个元素的数据类型可不同。
Tuple
与List集合类似,但是不同的是,List集合只能存储一种数据类型,而
Tuple
可存储多种数据类型。
可能...
元组
由圆括号定义(),有序列表叫
元组
,
tuple
和list非常类似,但是
tuple
一旦初始化就不能修改。可以根据下标取值,但不能赋值成另外的元素。
type展示
元组
数据列表类型
#展示
元组
数据列表类型
classmates = ('Michael', 'Bob', 'Tracy')
print(type(classmates))
E:\Anaconda3\anaconda\python.exe C:/Users/33066/Desktop/hello.py
<class '
tuple
'>
commons-lang3包
两个参数:MutablePair(可修改)、ImmutablePair,三个参数:MutableTriple(可修改)、ImmutableTriple(不可修改)
包commons-lang3 3.8.1里就有
org/apache/commons/lang3/
tuple
/ImmutableTriple.
java
java
tuple
s包
还有一个强大的包
java
tuple
s
<dependency>
<groupId>org.
java
tuple
s