首页 > 编程语言 >java 一个对象list 通过获取最大版本的 name值,版本为字符串格式 1 1.1 2 2.1 3 等

java 一个对象list 通过获取最大版本的 name值,版本为字符串格式 1 1.1 2 2.1 3 等

时间:2024-09-07 21:23:48浏览次数:12  
标签:java name list Item version 版本 new public String

你可以使用 Java 的流(Streams)功能来获取具有最大版本的 name 值。假设你的对象类名为 Item,并且包含 nameversion 字段,可以按照以下方式操作:

import java.util.*;
import java.util.stream.*;

class Item {
    String name;
    String version;

    // Constructor, getters, and setters
    Item(String name, String version) {
        this.name = name;
        this.version = version;
    }

    public String getName() { return name; }
    public String getVersion() { return version; }
}

public class Main {
    public static void main(String[] args) {
        List<Item> items = Arrays.asList(
            new Item("A", "1"),
            new Item("B", "1.1"),
            new Item("C", "2"),
            new Item("D", "2.1"),
            new Item("E", "3")
        );

        Item maxVersionItem = items.stream()
            .max(Comparator.comparing(Item::getVersion, Comparator.comparingInt(v -> {
                String[] parts = v.split("\\.");
                int major = Integer.parseInt(parts[0]);
                int minor = parts.length > 1 ? Integer.parseInt(parts[1]) : 0;
                return major * 100 + minor;
            })))
            .orElse(null);

        if (maxVersionItem != null) {
            System.out.println("Name with max version: " + maxVersionItem.getName());
        }
    }
}

这段代码通过 Comparator 来比较版本号,将其拆分为主要和次要部分,以便确定最大版本。

另一种方法是先将版本号转换为 Comparable 对象,然后进行比较。可以使用一个辅助方法来进行版本比较。以下是这种方法的示例代码:

import java.util.*;

class Item {
    String name;
    String version;

    Item(String name, String version) {
        this.name = name;
        this.version = version;
    }

    public String getName() { return name; }
    public String getVersion() { return version; }
}

public class Main {
    public static void main(String[] args) {
        List<Item> items = Arrays.asList(
            new Item("A", "1"),
            new Item("B", "1.1"),
            new Item("C", "2"),
            new Item("D", "2.1"),
            new Item("E", "3")
        );

        Item maxVersionItem = items.stream()
            .max(Comparator.comparing(Item::getVersion, new VersionComparator()))
            .orElse(null);

        if (maxVersionItem != null) {
            System.out.println("Name with max version: " + maxVersionItem.getName());
        }
    }
}

class VersionComparator implements Comparator<String> {
    @Override
    public int compare(String v1, String v2) {
        String[] parts1 = v1.split("\\.");
        String[] parts2 = v2.split("\\.");

        int len = Math.max(parts1.length, parts2.length);
        for (int i = 0; i < len; i++) {
            int part1 = i < parts1.length ? Integer.parseInt(parts1[i]) : 0;
            int part2 = i < parts2.length ? Integer.parseInt(parts2[i]) : 0;
            if (part1 != part2) {
                return Integer.compare(part1, part2);
            }
        }
        return 0;
    }
}

这里,VersionComparator 实现了 Comparator<String> 来比较版本号字符串,将它们拆分成部分进行逐一比较。这种方法可以确保按版本的顺序进行正确的比较。

标签:java,name,list,Item,version,版本,new,public,String
From: https://blog.51cto.com/u_16694558/11946628

相关文章

  • Java中Runtime类的学习
    Runtime类目录Runtime类什么是RuntimeRuntime类有哪些方法,有什么用什么是RuntimeRuntime(运行时),每个Java程序在运行时都相当于启动了一个JVM实例,每个JVM实例都对应一个Runtime对象。Runtime对象是由JVM负责实例化的,因此我们无法通过传统的方式实例化一个Runtime对象,只能通过调......
  • 彻底理解JavaScript中的闭包
    闭包是js的一个难点也是它的一个特色,是我们必须掌握的js高级特性,那么什么是闭包呢?它又有什么用呢?我们都知道,js的作用域分两种,全局和局部,基于我们所熟悉的作用域链相关知识,我们知道在js作用域环境中访问变量的权利是由内向外的,内部作用域可以获得当前作用域下的变量并且可以获......
  • Java基础13
    内部类将一个类A定义在另一个类B里面,里面的那个类A就称为内部类,类B则称为外部类。 内部类的声明理由:当一个事物A的内部,有一部分需要一个完整的结构B进行描述,而这个内部结构B只为外部事物A提供服务,并不会在其他地方用到,那么整个内部的完整结构B最好使用内部类。遵循高内聚......
  • Java多线程中常见死锁问题及解决方案
    在编写Java多线程代码的时候,很难避免会出现线程安全问题,在线程安全问题中也有一个很常见的现象就是死锁现象。今天我们就来聊一聊Java中的死锁问题,以及如何避免死锁问题。本次知识点讲解建立在大家已经知道“锁”......
  • 怎么查看ubuntu版本—查看Ubuntu版本方法
    怎么查看ubuntu版本—查看Ubuntu版本方法 城市野鹿 技术教程 2024-05-15 0 3,281怎么查看ubuntu版本—查看Ubuntu版本方法Ubuntu是一种基于Debian的开源操作系统,广泛应用于个人电脑、服务器和云计算平台。对于使用Ubuntu的用户来说,了解自己的系统版本是非常重要的。......
  • Java反序列化漏洞-TemplatesImpl利用链分析
    目录一、前言二、正文1.寻找利用链2.构造POC2.1生成字节码2.2加载字节码1)getTransletInstance2)defineTransletClasses2.3创建实例3.完整POC三、参考文章一、前言java.lang.ClassLoader#defineClassdefineClass可以加载字节码,但由于defineClass的作用域是protected,所以攻......
  • 基于Node.js+vue基于JavaWeb的在线英语学习管理系统(开题+程序+论文) 计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着全球化进程的加速和互联网技术的飞速发展,英语作为国际通用语言的重要性日益凸显。然而,传统英语学习方式受限于时间、地点及教学资源等因素,难以满足广大......
  • 【Java】爬取澳门区划信息
    官网地址:https://macaostreets.iam.gov.mo/zh_mo/freguesiaindex.html大区部分是在页面展示的 点击发现并没有请求网络,所以数据是js中存在的 找到了展示街道方法,这一段:使用大区id匹配上述变量的functionshowStreets(freguesia){varfreguesiaStre......
  • java+vue计算机毕设电影公司网【源码+开题+论文+程序】
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景在数字化时代,电影产业作为文化创意产业的重要组成部分,正经历着前所未有的变革与挑战。随着互联网技术的飞速发展,传统电影公司的运营模式亟需转型升级,......
  • java+vue计算机毕设第二课堂选课系统【源码+开题+论文+程序】
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着教育改革的不断深入和高校教学管理的日益精细化,第二课堂作为传统课堂教学的有效补充与延伸,在培养学生综合素质、创新能力及实践能力方面发挥着不......