最高序数枚举值

2024-04-18

我正在寻找从 bean 列表中的枚举属性列表计算最高序数枚举值。

例如,我有:

@Data
public class MyBean {
    private Priority priority;
}

and

public enum Priority {
    URGENT("Urgent"),
    HIGH("High"),
    MEDIUM("Medium"),
    LOW("Low");

    @Getter
    private final String value;

    Priority(String value) {

        this.value = value;
    }

    @Override
    public String toString() {

        return getValue();
    }
}

如果我有一个Listof MyBeans,我怎样才能找到bean的最大序数值priority在列表中?

例子:

   {myBean1, myBean2, myBean3, myBean4} where

    myBean1.getPriority() = Priority.LOW
    myBean2.getPriority() = Priority.URGENT
    myBean3.getPriority() = Priority.HIGH
    myBean4.getPriority() = null

    returns Priority.URGENT

我认为最坏的情况是我可以迭代values()在枚举中以Collections.min(Arrays.asList(Priority.values()));并循环遍历每个 bean 以查看值是否匹配。但这似乎很乏味。


您可以使用 Stream API,尤其是max(Comparator)方法来查找具有最高优先级的 bean。

注意:您的枚举具有相反顺序的优先级。在我的示例中,我将假设相反的情况以使代码更加不言自明。转变max for min and nullsFirst with nullsLast,如果您不重新排列枚举。

Bean highest = beans.stream()
                    .max(Comparator.comparing(Bean::getPriority,
                                              Comparator.nullsFirst(Comparator.comparing(Priority::ordinal))))
                    .orElse(null);

return highest.getPriority();

如果只需要优先级,可以简化:

return beans.stream()
            .map(Bean::getPriority)
            .filter(Objects::nonNull)
            .max(Comparator.comparing(Enum::ordinal))
            .orElse(null);

其工作原理如下:

  1. 仔细观察每一粒豆子
  2. 优先考虑
  3. 丢弃空优先级
  4. 选择最高优先级
  5. 注意列表为空或所有优先级为空

注意:我的例子非常冗长。 shmosel(已删除)的答案表明您可以通过以下方式自然地对枚举进行排序ordinal,制作更好的比较器。 Comparator.comparing(Enum::ordinal)就可以成为Comparator.naturalOrder().

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

最高序数枚举值 的相关文章

  • 策略模式还是命令模式?

    假设我有一个金融交易列表 我需要针对这些交易执行一系列验证规则 一个例子是我有一笔购买产品的交易 但是首先我需要验证交易中的帐户是否有足够的可用资金 产品没有售完等 由于这些规则 交易将是标记为拒绝 并应指定错误代码 当然 我正在考虑用一个
  • 从文本文件中读取阿拉伯字符

    我完成了一个项目 在该项目中我读取了用记事本编写的文本文件 我的文本文件中的字符是阿拉伯语 文件编码类型是UTF 8 当在 Netbeans 7 0 1 中启动我的项目时 一切似乎都正常 但是当我将项目构建为 jar 文件时 字符以这种方式
  • 在 Java 中使用 Batik 检查和删除 SVG 中的属性

    这个问题基本上说明了一切 如何检查 SVG 是否具有 viewBox 属性 我正在使用蜡染库 我需要这个 因为我需要 至少 通知用户有一个 viewBox 属性 我可以删除它吗 使用 org w3c dom 类 您可以按照以下方式做一些事情
  • 最快的高斯模糊实现

    如何以最快的速度实施高斯模糊 http en wikipedia org wiki Gaussian blur算法 我要用Java来实现它 所以GPU http en wikipedia org wiki Graphics processi
  • 本地开发的 Azure Functions 扩展包版本问题

    我有一个带有队列触发器的 Java 11 Azure 函数 该函数在部署到 Azure 时按预期工作 并正确从定义的服务总线主题中提取消息 但是 运行相同的功能locally除非我回滚版本 否则不起作用Azure Functions 绑定扩
  • 在哪里保存选项值、重要文件的路径等[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我正在创建一个程序 需要设置一些选项值以及图像文件的一些路径 SQLite 数据库的路径 有关各种按钮上文本的一些信息 有关要使用哪个数据库的信
  • 我需要在 JFileChooser(打开模式)中显示不带扩展名的文件名。如何?

    我在打开模式下使用 JFileChooser 我需要显示不带扩展名的 文件名 字段 如何 我知道文件视图 它删除文件系统文件中的扩展名 但将所选文件中的扩展名保留在 文件名 字段中解释 http saveimg ru show image
  • 这个等待通知线程语义的真正目的是什么?

    我刚刚遇到一些代码 它使用等待通知构造通过其其他成员方法与类中定义的线程进行通信 有趣的是 获取锁后 同步范围内的所有线程都会在同一锁上进行定时等待 请参见下面的代码片段 随后 在非同步作用域中 线程执行其关键函数 即 做一些有用的事情1
  • 如何在 MSSQL 中获取 CURRENT_DATE?

    我正在使用 jpa 3 o 和 Hibernate 我有一个命名查询 SELECT COUNT wt id FROM WPSTransaction wt WHERE wt createdDate gt CURRENT DATE WPSTra
  • 在java中将字符串日期转换为美国格式

    我有下面的代码 其中日期为字符串类型 我必须将其设置为美国格式 所以下面我已经展示了它 private static final SimpleDateFormat usOutputDate new SimpleDateFormat MM d
  • 纱线上的火花,连接到资源管理器 /0.0.0.0:8032

    我正在我的开发机器 Mac 上编写 Spark 程序 hadoop的版本是2 6 spark的版本是1 6 2 hadoop集群有3个节点 当然都在linux机器上 我在idea IDE中以spark独立模式运行spark程序 它运行成功
  • 在尝试使用 GPS 之前如何检查 GPS 是否已启用

    我有以下代码 但效果不好 因为有时 GPS 需要很长时间 我该如何执行以下操作 检查GPS是否启用 如果启用了 GPS 请使用 GPS 否则请使用网络提供商 如果 GPS 时间超过 30 秒 请使用网络 我可以使用时间或 Thread sl
  • 在 Java 中创建 XML 文件的最佳方法是什么?

    我们目前使用 dom4j 来创建 XML 文件 不过 我猜现在有更好的东西了 如果我们使用的是 Java 1 6 或更高版本 那么在编写 XML 文件时最好使用什么类 运行速度最快 使用简单 我不需要构建一个 DOM 然后编写整个 DOM
  • 如何从字符串中解析一个大整数? [复制]

    这个问题在这里已经有答案了 我有一个这样的方法 Integer parseInt myInt 不是这个整数变得很长 我得到以下异常 java lang NumberFormatException For input string 40001
  • HTTP 状态 405 - 此 URL java servlet 不支持 HTTP 方法 POST [重复]

    这个问题在这里已经有答案了 我无法使页面正常工作 我有要发布的表单方法和我的 servlet 实现doPost 然而 它不断地向我表明我并不支持POST方法 我只是想做一个简单的网站并将值插入到我的 MySQL 数据库中 type Stat
  • 如何减去两个 XmlGregorianCalendar 对象来创建一个 Duration 对象?

    我想计算两个时间之间的差值XmlGregorianCalendar对象 从而创建一个Duration object 但我还没有找到执行减法的干净方法 你会怎么做 那应该是 DatatypeFactory newDuration xgc2 t
  • 删除 JFX 中选项卡后面的灰色背景

    So is there any way to remove the gray area behind the tab s 我尝试过用 CSS 来做到这一点 但没有找到方法 要设置 tabpane 标题的背景颜色 请在 CSS 文件中写入 t
  • 在实现使用原始类型的接口时如何避免警告?

    我正在实施流程工厂 http help eclipse org ganymede index jsp topic org eclipse platform doc isv reference api org eclipse debug co
  • 如何使用自定义 JDK 构建 Jenkins 项目?

    我有一个常规的 Jenkins 实例 运行一些多分支管道 该实例在 JDK 11 上运行 因为 Jenkins 并不真正支持更高版本 没关系 但不好的是 我的所有管道似乎也都受到 Java 11 的限制 Jenkins 仅使用它自己也使用的
  • java中void的作用是什么?

    返回类型 方法返回值的数据类型 如果方法不返回值 则返回 void http download oracle com javase tutorial java javaOO methods html http download oracle

随机推荐

  • 在 Windows 上使用 PHP 获取总可用系统内存

    使用 PHP 我想获取系统可用的总内存 而不仅仅是空闲或已用内存 在 Linux 上 这非常简单 你可以做 memory fopen proc meminfo 然后解析该文件 有人知道 Windows 的等效方法吗 我愿意接受任何建议 编辑
  • 通过 UIPanGestureRecognizer 传递点击

    我想检测整个屏幕上的滑动 但是 屏幕包含UIButtons 如果用户点击这些按钮之一 我希望触发 Touch Up Inside 事件 我创建了一个UIView在我的屏幕顶部 并添加了一个UIPanGestureRecognizer在其上检
  • Qt 线程阻止 UI 响应

    我想我可能误解了Qt线程中的几个概念 在我的窗口类中 它派生自 QWidget class Widget Q OBJECT public Widget Widget QObject parent 0 QObject parent moveT
  • XNA 数字锁定影响输入

    我有一个中断 在键盘按键上给我协调键 当数字锁打开时 按键会显示为 Numpad1 Numpad2 等 当数字锁关闭时 数字键盘键会变成 End Left Right Up PageLock 我不能让这种情况发生 因为我需要将这些键 左 右
  • 确定 iPhone 上的互联网可用性?

    我在 iPhone 应用程序中使用 NSURLConnection 如下所示 NSURLConnection conn NSURLConnection alloc initWithRequest request delegate self
  • 有没有办法简化 C# 中的反射委托代码?

    In this https stackoverflow com a 12867132 171121回应 我想出了以下辅助方法 可以被不同的人重用Task创建者将事件转换为任务完成源 Helper method static Task
  • PySpark,Win10 - 系统找不到指定的路径

    我之前将 PySpark 作为通过 pip 安装的 Python 包安装 最近我使用干净版本的 Python 卸载了它并下载了独立版本 在我的用户变量中 我创建了一个名为 SPARK HOME 的路径 值为 C spark 2 3 2 bi
  • 尝试在 iPhone 上调试应用程序时收到消息“已添加、修改或删除签名资源”

    在尝试在 iPhone 设备上调试使用 3 2 SDK 创建的版本时 我收到消息 已添加 修改或删除了签名资源 我可以清理 重建 然后安装 不会出现错误 但如果我尝试在不清理的情况下安装 则会显示错误 任何人都知道可能是什么原因造成的 我找
  • Jenkins/Apache 反向代理错误

    根据我的搜索 我遇到了一个似乎相当常见的问题 但是我已按照我遇到的所有说明和 或修复进行操作 但没有一个对我有用 所以我问这个希望有人可以引导我走向正确的方向 我在 OS X 10 11 2 上通过 Homebrew 安装了 Jenkins
  • 如何使用 ifstream 正确从文件中读取 unsigned int 变量?

    我的代码从文本文件中读取 unsigned int 变量Input File Name unsigned int Column Count Cols unsigned int Row Count Rows try ifstream inpu
  • 如何使用Jqplot在同一个堆积条形图中显示两组不同颜色的条形

    我想制作一个包含两组堆叠条形图的条形图 将它们组合在一起以比较两组堆叠条形图 应按以下方式显示 我经历过这个link http www jqplot com tests bar charts php 但它并没有帮助我绘制如上图所示的内容 我
  • 为按钮添加 UAC 防护罩并保留其背景图像?

    在 winforms 应用程序中使用 C 和 Net 4 0 是否可以将 UAC 屏蔽添加到按钮并保留按钮背景图像 如何 这就是我现在正在使用的 但它删除了图像 DllImport user32 dll public static exte
  • Java中获取SMB共享文件名和权限

    我想要连接到 SMB 服务器并浏览其文件 对于给定的路径 能够检索文件和文件夹的列表以及名称和权限 我需要支持所有 SMB 方言 并且能够从我的代码中做到这一点 代码大概如下 smbClient connect serverInfo inf
  • 如何命名在存储过程中返回的数据集的表?

    我有以下存储过程 Create procedure psfoo AS select from tbA select from tbB 然后我以这种方式访问 数据 Sql Command mySqlCommand new SqlCommand
  • UICollectionView ClipsToBounds 无法与分页正常工作

    我正在使用启用水平分页的 UICollectionView 我的 collectionView 框架小于屏幕尺寸 我使用了以下代码 myCollectionView clipsToBounds FALSE 我仍然无法看到 Collectio
  • 奇怪的 Java 转换异常。为什么我不能将 Long 转换为 Float?

    为什么我不能将 Long 转换为 Float 我收到此错误消息 java lang ClassCastException java lang Long 无法转换为 java lang Float 为什么这是个问题 我尝试转换的数字是域 10
  • 处理程序/可运行延迟有时会产生不同步的事件

    当尝试学习如何创建延迟时 我研究并发现主要答案是使用 Handler Runnable postDelayed Handler handler new Handler final Runnable r new Runnable public
  • 什么时候使用Q_NULLPTR?

    I see Q NULLPTR在 Qt 源代码和示例中被广泛使用 但我没有找到关于它到底是什么以及何时应该使用的文档 例如在这个官方示范 http doc snapshots qt io qt5 5 6 qtserialbus can ma
  • 检测 YouTube 视频何时播放完毕

    如何在官方 YouTube Android 应用程序中检查 YouTube 视频何时播放完毕 在 LogCat 中 我看到以下内容 VideoStage MEDIA PLAYING VIDEO 有什么方法可以检测到什么时候完成吗 你可以使用
  • 最高序数枚举值

    我正在寻找从 bean 列表中的枚举属性列表计算最高序数枚举值 例如 我有 Data public class MyBean private Priority priority and public enum Priority URGENT