介绍java中Pair

2023-05-16

介绍java中Pair

在这篇文章中,我们讨论了一个非常有用的编程概念,配对(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");

总结

本文讨论java配对概念,并通过实例展示了其不同的实现,核心java及第三方提供实现。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

介绍java中Pair 的相关文章

随机推荐

  • 2011年终总结:为了娜娜的微笑

    蒙娜丽莎为什么笑 xff1f 这个问题 xff0c 如果达 芬奇自己都没有交代过 xff0c 那么就没有人知道答案了 xff0c 后来所有的答案都是推测的 xff0c 答案众说纷纭 xff0c 这里就不做评论了 作为计算机运行的代码 xff
  • 安装windows+两个ubuntu(三系统)成功案例

    在已有的win10 43 ubuntu18 04双系统基础上 xff0c 再安装一个ubuntu20 04 原有配置 1T固态硬盘 43 2T机械硬盘 xff1b 固态硬盘上已经安装了win10 xff0c 机械硬盘上一个分区已经安装了ub
  • Windows 文件资源管理器中搜索带特殊字符文件名的方法

    今天处理一些文件 xff0c 文件夹这包含有类似 16年普通高等学校招生全国统一考试 英语 的文件名 xff0c 想全部找出来删除掉 xff0c 直接在文件资源管理器里面输入 是搜索不到想要的文件的 xff0c 这些是特殊字符 xff0c
  • ROS学习记录——Gazebo 里添加自己的物体模型

    提示 xff1a 文章写完后 xff0c 目录可以自动生成 xff0c 如何生成可参考右边的帮助文档 目录 前言 一 下载3D模型 二 编辑三维模型 1 使用sketch up 2 使用blender编辑 三 将三维模型导入Gazebo 1
  • 【NEUQ RM SI战队项目开源】gazebo仿真开源

    NEUQ RM SI战队项目开源 gazebo仿真开源 写在前面演示视频第一部分 xff1a 机器人仿真环境正文 xff1a 基于gazebo的RM仿真环境贡献照片墙 写在前面 一个新冠疫情 xff0c 打乱了所有队伍的备赛计划 xff0c
  • 嵌入式软件高频面试题

    本文转载自公众号 xff1a 嵌入式Hacker 原文地址 xff1a 职场人生 嵌入式软件高频面试题 一 进程与线程 1 什么是进程 线程 xff0c 有什么区别 xff1f 进程是资源 xff08 CPU 内存等 xff09 分配的基本
  • Ubuntu下硬件信息的查看

    一 相关命令 1 查看cpu信息概要 xff1a lscpu 2 大而全的命令 xff08 查看cpu的信更加全面 xff09 xff1a cat proc cpuinfo 3 查看整个系统的硬件信息 xff1a lshw 如果觉得终端看起
  • 我的2011—前脚踏进了IT行业的一步,大一Java开发学生。

    我写这个犹豫了很久 xff0c 想想在CSDN都是在这条路上走了几年的 xff0c 十几年的 xff0c 我还只是走了半年的一个90后 但是 xff0c 在这半年里 xff0c 我的感触颇深 xff0c 所以就献丑了吧 从高考完了的那一天就
  • Shell 脚本监控磁盘空间

    df 命令可以展示文件系统的磁盘有效空间信息 如果不指定文件名 xff0c 则当前所有挂载的文件系统有效空间信息 实现步骤 使用 df 查看磁盘信息使用 grep命令 过滤文件系统 xff0c 获取空间使用百分比通过Shell 脚本进行监控
  • R 实现熵权法计算权重

    按照信息论基本原理的解释 xff0c 信息是系统有序程度的一个度量 xff0c 熵是系统无序程度的一个度量 xff1b 根据信息熵的定义 xff0c 对于某项指标 xff0c 可以用熵值来判断某个指标的离散程度 xff0c 其信息熵值越小
  • R实现KMeans聚类算法教程

    本文和你一起学习无监督机器学习算法 kmeans算法 xff0c 并在R中给详细的实现示例和步骤 什么是k means聚类算法 聚类是从数据集中对观测值进行聚类的机器学习方法 它的目标是聚类相似观测值 xff0c 不同类别之间差异较大 聚类
  • 如何在Java中调用Python

    Python语言有丰富的系统管理 数据处理 统计类软件包 xff0c 因此从java应用中调用Python代码的需求很常见 实用 DataX 是阿里开源的一个异构数据源离线同步工具 xff0c 致力于实现包括关系型数据库 MySQL Ora
  • 集群多机ROS通信中间件:swarm_ros_bridge

    最近写了一个无线网络环境下 xff08 比如WIFI xff09 多机ROS通信的ROS包 swarm ros bridge xff1a https gitee com shu peixuan swarm ros bridge 该项目已被R
  • ClickHouse 基于角色访问控制(RBAC)最佳实践

    本文介绍ClickHouse RBAC访问控制模型 包括如何启用SQL管理 xff0c 创建管理员用户 xff0c 创建角色 xff0c 授权 xff0c 细粒度列和行级授权 并通过示例进行验证实现过程 启用RBAC 在users xml中
  • ClickHouse服务端配置最佳实践

    安装好ClickHouse xff0c 需要对服务和用户进行配置 本文介绍ClickHouse建议配置方式 xff0c 配置项修改后是否需要重启 xff0c 另外还提供一些实例配置加深理解 独立自定义配置 Clickhouse 服务端配置包
  • 2014年度总结——软件产品化的简要理解

    2014年度总结 软件产品化的简要理解 2014年转瞬即逝 xff0c 真是让人感慨 xff0c 岁月不是一天天在逝去 xff0c 而是一年年 xff1b 总结一年的工作非常有意义 xff0c 觉得今年最大的变化就是从定制软件到产品化的过度
  • R语言中mean函数

    mean函数是求算术平均值 用法 xff1a mean x trim 61 0 na rm 61 FALSE x是数值型 逻辑向量 trim表示截尾平均数 xff0c 0 0 5之间的数值 xff0c 如 xff1a 0 10表示丢弃最大1
  • 使用Spring @DependsOn控制bean加载顺序

    使用Spring 64 DependsOn控制bean加载顺序 spring容器载入bean顺序是不确定的 xff0c spring框架没有约定特定顺序逻辑规范 但spring保证如果A依赖B 如beanA中有 64 Autowired B
  • 使用R中merge()函数合并数据

    使用R中merge 函数合并数据 在R中可以使用merge 函数去合并数据框 xff0c 其强大之处在于在两个不同的数据框中标识共同的列或行 如何使用merge 获取数据集中交叉部分 merge 最简单的形式为获取两个不同数据框中交叉部分
  • 介绍java中Pair

    介绍java中Pair 在这篇文章中 xff0c 我们讨论了一个非常有用的编程概念 xff0c 配对 Pair 配对提供了一种方便方式来处理简单的键值关联 xff0c 当我们想从方法返回两个值时特别有用 在核心Java库中可以使用配对 Pa