介绍java中Pair(配对)

作者:梦想画家 时间:2021-09-03 10:15:39 

介绍java中Pair

在这篇文章中,我们讨论了一个非常有用的编程概念,配对(Pair)。配对提供了一种方便方式来处理简单的键值关联,当我们想从方法返回两个值时特别有用。

关于Java中的Pair用法

在核心Java库中可以使用配对(Pair)的实现。除此之外,某些第三方库,比如Apache Commons和Vavr,已经在各自的api中公开了这个功能。

核心java配对实现

Pair类

Pair类在javafx.util 包中,类构造函数有两个参数,键及对应值:

Pair<Integer, String> pair = new Pair<>(1, "One");
   Integer key = pair.getKey();
   String value = pair.getValue();

示例描述使用Pair类实现简单Integer到String的映射。示例中getKey方法返回key对象,getValue方法返回对应值对象。

AbstractMap.SimpleEntry 和 AbstractMap.SimpleImmutableEntry

SimpleEntry定义在抽象类AbstractMap里面,其构造方法与Pair类似:

AbstractMap.SimpleEntry<Integer, String> entry
     = new AbstractMap.SimpleEntry<>(1, "one");
   Integer key = entry.getKey();
   String value = entry.getValue();

其键和值可以通过标准的getter和setter方法获得。

另外AbstractMap 类还包含一个嵌套类,表示不可变配对:SimpleImmutableEntry 类。

AbstractMap.SimpleImmutableEntry<Integer, String> entry
     = new AbstractMap.SimpleImmutableEntry<>(1, "one");

应用方式与可变的配对一样,除了配置的值不能修改,尝试修改会抛出UnsupportedOperationException异常。

Apache Commons

在Apache Commons库中,org.apache.commons.lang3.tuple 包中提供Pair抽象类,不能被直接实例化。
其有两个子类,分别代表可变与不可变配对:ImmutablePair 和 MutablePair。两者都实现了访问key/value以及setter和getter方法:

ImmutablePair<Integer, String> pair = new ImmutablePair<>(2, "Two");
   Integer key = pair.getKey();
   String value = pair.getValue();

尝试在ImmutablePair 执行setValue方法,会抛出UnsupportedOperationException异常。但在可变配对上执行完全正常:

Pair<Integer, String> pair = new MutablePair<>(3, "Three");
   pair.setValue("New Three");

Vavr库

Vavr库中不可变的Tuple2类提供配对功能:

Tuple2<Integer, String> pair = new Tuple2<>(4, "Four");
   Integer key = pair._1();
   String value = pair._2();

在这个实现中,创建对象后不能修改,所以更新方法返回改变后的新实例:

tuplePair = pair.update2("New Four");

来源:https://blog.csdn.net/neweastsun/article/details/80294811

标签:java,Pair
0
投稿

猜你喜欢

  • 基于Java实现经典蜘蛛纸牌游戏

    2021-09-06 15:22:57
  • C# listview 点击列头排序的实例

    2023-11-26 20:09:05
  • android 实现类似微信缓存和即时更新好友头像示例

    2023-12-04 20:47:41
  • C++智能指针实例详解

    2021-12-18 00:38:59
  • Android蓝牙开发深入解析

    2022-09-21 12:49:03
  • 浅谈C#中Process类的使用详解

    2022-11-13 01:42:44
  • java IO流文件的读写具体实例

    2023-08-21 04:44:34
  • Java实现二叉树的深度优先遍历和广度优先遍历算法示例

    2021-07-16 12:37:17
  • Java8新特性之接口中的默认方法和静态方法详解

    2022-05-10 15:16:19
  • C#实现获取一年中是第几个星期的方法

    2023-12-04 02:02:46
  • 浅析依赖注入框架Autofac的使用

    2023-04-19 22:23:31
  • Java Swing中JDialog实现用户登陆UI示例

    2021-10-12 13:58:00
  • Gradle配置教程之自定义APK名称与输出路径

    2023-03-04 17:35:27
  • java高并发锁的3种实现示例代码

    2022-05-23 16:45:47
  • springMVC+velocity实现仿Datatables局部刷新分页方法

    2022-06-20 01:05:22
  • Android中activity处理返回结果的实现方式

    2022-10-21 12:36:36
  • SpringBoot整合Jackson超详细用法(附Jackson工具类)

    2023-05-31 23:56:06
  • Android从0到完整项目(1)使用Android studio 创建项目详解

    2022-12-13 13:48:21
  • C#取得Web程序和非Web程序的根目录的N种取法总结

    2023-07-16 07:37:32
  • 理解maven命令package、install、deploy的联系与区别

    2022-08-09 05:11:39
  • asp之家 软件编程 m.aspxhome.com