【问题标题】:How to get minimum and maximum value from List of Objects using Java 8如何使用 Java 8 从对象列表中获取最小值和最大值
【发布时间】:2023-03-03 09:01:22
【问题描述】:

我有这样的课:

public class Test {
    private String Fname;
    private String Lname;
    private String Age;
    // getters, setters, constructor, toString, equals, hashCode, and so on
}

还有一个像List<Test> testList 这样的列表,里面有Test 元素。

如何使用 Java 8 获得 age 的最小值和最大值?

【问题讨论】:

  • 我讨厌听起来像破唱片,但是...What have you tried? Show us some code and a specific error or problem.
  • 既然您指定了要使用 Java 8,请查看 Streams。你应该能够自己解决剩下的问题。

标签: java list java-8 java-stream


【解决方案1】:

为了简化事情,您可能应该将您的年龄设为 Integerint 而不是 Sting,但由于您的问题是关于 String age,因此此答案将基于 String 类型。


假设String age 持有表示整数范围内值的字符串,您可以简单地将其映射到IntStream 并使用它的IntSummaryStatistics 之类的

IntSummaryStatistics summaryStatistics = testList.stream()
        .map(Test::getAge)
        .mapToInt(Integer::parseInt)
        .summaryStatistics();

int max = summaryStatistics.getMax();
int min = summaryStatistics.getMin();

【讨论】:

  • 不需要双图;只需 mapToInt(Test::getAge),即可为您完成拆箱。
  • @BrianGoetz 不完全是。请注意 getAge 返回 String 而不是 int
  • 谁编写了将数字存储在字符串中的域对象?嘘。 :)
  • 好的,但是回到有用的领域,我想说的是:lambda转换会做必要的适应,比如加宽、装箱、强制转换等,以弥补自然类型之间的差异的 lambda 和目标类型——不需要像拆箱一样手动插入适配。
【解决方案2】:

最大age

   testList.stream()
            .mapToInt(Test::getAge)
            .max();

分钟age:

   testList.stream()
            .mapToInt(Test::getAge)
            .min();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-17
    相关资源
    最近更新 更多