java 取 list 对象中取某个字段值的最大值

less bb, look code

    private static void streamMax() {
        Student zs = new Student();
        zs.setName("张三(11)");
        zs.setAge(28);

        Student zsf = new Student();
        zsf.setName("张三丰(66)");
        zsf.setAge(68);

        Student zuj = new Student();
        zuj.setName("张无忌(98");
        zuj.setAge(38);

        List<Student> list = Arrays.asList(zs, zsf, zuj);

        // 取名字最大编号
        Optional<Student> studentOptional = list.stream().filter(userFilter -> {
            String name = userFilter.getName();
            return name.contains("(") && name.contains(")");
        }).max(Comparator.comparing(student -> {
            String name = student.getName();
            String strNum = name.substring(name.indexOf("(") + 1, name.indexOf(")"));
            return Integer.parseInt(strNum);
        }));

        studentOptional.ifPresent(student -> {
            System.out.println(student.getName());
        });

        // 取年龄最大
        Optional<Student> ageMax = list.stream().max(Comparator.comparing(Student::getAge));
        ageMax.ifPresent(student -> {
            System.out.println(student.getAge());
        });
        
    }

Java中,特别是使用Java 8及以上版本时,可以通过Stream API或`Collections`类来从一个包含对象的`List`集合中获某个字段最大值。以下是两种常用的方法: ### 使用Stream API获最大值 通过Stream API可以非常简洁地操作集合中的数据,并且支持链式调用。以下是一个示例代码,展示如何通过Stream API获某个字段最大值。 ```java import java.util.*; import java.util.stream.*; public class Main { public static void main(String[] args) { List<Person> personList = Arrays.asList( new Person("Alice", 25), new Person("Bob", 30), new Person("Charlie", 28) ); // 获年龄最大的Person对象 Optional<Person> maxAgePerson = personList.stream() .max(Comparator.comparingInt(Person::getAge)); // 输出结果 maxAgePerson.ifPresent(person -> System.out.println("Name: " + person.getName() + ", Age: " + person.getAge())); } } class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public int getAge() { return age; } } ``` 此方法返回的是一个`Optional`对象,以避免在列表为空时出现`NoSuchElementException`异常。 ### 使用`Collections.max()`方法获最大值 如果更倾向于传统的集合操作方式,也可以使用`Collections.max()`方法结合自定义比较器实现相同的功能[^2]。 ```java import java.util.*; public class Main { public static void main(String[] args) { List<Person> personList = new ArrayList<>(); personList.add(new Person("Alice", 25)); personList.add(new Person("Bob", 30)); personList.add(new Person("Charlie", 28)); // 创建比较器用于比较Person对象的年龄字段 Comparator<Person> ageComparator = Comparator.comparingInt(Person::getAge); // 找到年龄最大的人 Person oldestPerson = Collections.max(personList, ageComparator); System.out.println("Name: " + oldestPerson.getName() + ", Age: " + oldestPerson.getAge()); } } class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public int getAge() { return age; } } ``` 这种方法简单直接,但需要注意当列表为空时会抛出异常,因此需要确保输入的列表不为空或者提前进行空检查。 以上两种方法都提供了从`List`集合中获对象字段最大值的有效途径,并可以根据实际需求选择适合的方式。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值