添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
乖乖的围巾  ·  JTextArea (Java ...·  5 月前    · 
小胡子的小马驹  ·  Windows Server 2012 ...·  1 年前    · 

场景:当在一个方法中, 你需要返回几个对象,这几个对象的类型一致,你可以返回一个数组;如果几个对象的类型不同呢,当然你可以返回一个Object[]数组,可是这样在使用结果数组的时候,就需要强转对象的类型,会导致类型不安全;也可以定义一个dto,当多个场景下需要使用的不同,需要定义多个dto,这样会类爆炸,而且重用率极低;在非常接近Java语言的Scala里有元组的定义:val t = (1, 3.14, "Fred"),就是一个不同类型的数据放到一个线性集合里,在Java里我们可以模拟出一个类似的结构,以适合上面的场景

demo:

Java代码
  1. abstract class Tuple {
  2. public static void main (String[] args) {
  3. Tuple tuple2 = Tuple.<String, Integer>of( "hello" , 1 );
  4. Tuple tuple3 = Tuple.<String, Integer, String>of( "hello" , 1 , "hi" );
  5. System.out.println(tuple2._1().get() + "|" + tuple2._2().get());
  6. System.out.println(tuple3._1().get() + "|" + tuple3._2().get() + "|" + tuple3._3().get());
  7. }
  8. public static <E, T> Tuple of (E e, T t) {
  9. return new Tuple2(e, t);
  10. }
  11. public static <E, T, K> Tuple of (E e, T t, K k) {
  12. return new Tuple3(e, t, k);
  13. }
  14. public abstract <E> Optional<E> _1 ();
  15. public abstract <E> Optional<E> _2 ();
  16. public abstract <E> Optional<E> _3 ();
  17. }
  18. class Tuple2<E, T> extends Tuple {
  19. private E e;
  20. private T t;
  21. Tuple2 (E e, T t) {
  22. this .e = e;
  23. this .t = t;
  24. }
  25. @Override
  26. public Optional<E> _1 () {
  27. return Optional.of(e);
  28. }
  29. @Override
  30. public Optional<T> _2 () {
  31. return Optional.of(t);
  32. }
  33. @Override
  34. public <E> Optional<E> _3() {
  35. return Optional.absent();
  36. }
  37. }
  38. class Tuple3<E, T, K> extends Tuple {
  39. private E e;
  40. private T t;
  41. private K k;
  42. Tuple3 (E e, T t, K k) {
  43. this .e = e;
  44. this .t = t;
  45. this .k = k;
  46. }
  47. public Optional<E> _1 () {
  48. return Optional.of(e);
  49. }
  50. public Optional<T> _2 () {
  51. return Optional.of(t);
  52. }
  53. public Optional<K> _3 () {
  54. return Optional.of(k);
  55. }
  56. }

上面的代码中定义了三个类,父类为抽象类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 '&gt
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