Java8 List统计(最大值,最小值、平均值、总和)

深碍√TFBOYSˉ_ 2023-10-10 13:54 149阅读 0赞

核心功能代码:

  1. Integer sum = list.stream().mapToInt(User::getAge).sum();
  2. System.out.println("年龄总和:" +sum);
  3. Integer max = list.stream().mapToInt(User::getAge).max().orElse(0);
  4. System.out.println("年龄 最大:" + max);
  5. Integer min = list.stream().mapToInt(User::getAge).min().orElse(0);
  6. System.out.println("年龄 最小:" + min);
  7. Double average = list.stream().mapToInt(User::getAge).average().orElse(0l);
  8. System.out.println("年龄 平均:" + df.format(average));

Java8 Stream除了支持Int类型,还支持double 类型和long类型

watermark_type_d3F5LXplbmhlaQ_shadow_50_text_Q1NETiBA5Zyo5aWL5paX55qE5aSn6YGT_size_8_color_FFFFFF_t_70_g_se_x_16

学生年龄实例:

  1. package com.digipower.test;
  2. import java.text.DecimalFormat;
  3. import java.util.ArrayList;
  4. import java.util.List;
  5. import java.util.Random;
  6. public class ListTest {
  7. private static final DecimalFormat df = new DecimalFormat("0.00");//保留两位小数点
  8. public static void main(String[] args) {
  9. Random random = new Random();
  10. List<User> list = new ArrayList<User>();
  11. for (int i = 1; i <= 5; i++) {
  12. int age = random.nextInt(10) + 5;// 随机年龄:10-15
  13. User u = new User(String.valueOf(i), "用户-" + i, age);
  14. list.add(u);
  15. }
  16. Integer sum = list.stream().mapToInt(User::getAge).sum();
  17. System.out.println("年龄总和:" +sum);
  18. Integer max = list.stream().mapToInt(User::getAge).max().orElse(0);
  19. System.out.println("年龄 最大:" + max);
  20. Integer min = list.stream().mapToInt(User::getAge).min().orElse(0);
  21. System.out.println("年龄 最小:" + min);
  22. Double average = list.stream().mapToInt(User::getAge).average().orElse(0l);
  23. System.out.println("年龄 平均:" + df.format(average));
  24. }
  25. static class User {
  26. private String id;
  27. private String name;
  28. private int age;
  29. public String getId() {
  30. return id;
  31. }
  32. public void setId(String id) {
  33. this.id = id;
  34. }
  35. public String getName() {
  36. return name;
  37. }
  38. public void setName(String name) {
  39. this.name = name;
  40. }
  41. public int getAge() {
  42. return age;
  43. }
  44. public void setAge(int age) {
  45. this.age = age;
  46. }
  47. public User(String id, String name, int age) {
  48. super();
  49. this.id = id;
  50. this.name = name;
  51. this.age = age;
  52. }
  53. }
  54. }

效果截图:

watermark_type_d3F5LXplbmhlaQ_shadow_50_text_Q1NETiBA5Zyo5aWL5paX55qE5aSn6YGT_size_17_color_FFFFFF_t_70_g_se_x_16

溫馨提示:針對金融数据类型BigDecimal,求和方式必须使用Stream 类中的reduce函数

学生余额实例:

  1. package com.digipower.test;
  2. import java.math.BigDecimal;
  3. import java.text.DecimalFormat;
  4. import java.util.ArrayList;
  5. import java.util.List;
  6. import java.util.Optional;
  7. import java.util.Random;
  8. public class ListTest {
  9. private static final DecimalFormat df = new DecimalFormat("0.00");//保留两位小数点
  10. public static void main(String[] args) {
  11. Random random = new Random();
  12. List<User> list = new ArrayList<User>();
  13. for (int i = 1; i <= 5; i++) {
  14. int age = random.nextInt(10) + 5;// 随机年龄:10-15
  15. User u = new User(String.valueOf(i), "用户-" + i, age);
  16. double balance = random.nextDouble() * 100 + 100;//随机金额:100-200
  17. u.setBalance(new BigDecimal(balance).setScale(BigDecimal.ROUND_HALF_UP, 2));
  18. list.add(u);
  19. }
  20. Integer sum = list.stream().mapToInt(User::getAge).sum();
  21. System.out.println("年龄总和:" +sum);
  22. Integer max = list.stream().mapToInt(User::getAge).max().orElse(0);
  23. System.out.println("年龄 最大:" + max);
  24. Integer min = list.stream().mapToInt(User::getAge).min().orElse(0);
  25. System.out.println("年龄 最小:" + min);
  26. Double average = list.stream().mapToInt(User::getAge).average().orElse(0l);
  27. System.out.println("年龄 平均:" + df.format(average));
  28. BigDecimal add = list.stream().map(User::getBalance).reduce(BigDecimal.ZERO, BigDecimal::add);
  29. System.out.println("金额 总和:" + df.format(add));
  30. Optional<User> maxBalance = list.stream().max((u1, u2) -> u1.getBalance().compareTo(u2.getBalance()));
  31. System.out.println("金额 最高:" + df.format(maxBalance.get().getBalance()));
  32. Optional<User> minBalance = list.stream().min((u1, u2) -> u1.getBalance().compareTo(u2.getBalance()));
  33. System.out.println("金额 最低:" + df.format(minBalance.get().getBalance()));
  34. }
  35. static class User {
  36. private String id;
  37. private String name;
  38. private int age;
  39. private BigDecimal balance;
  40. public String getId() {
  41. return id;
  42. }
  43. public void setId(String id) {
  44. this.id = id;
  45. }
  46. public String getName() {
  47. return name;
  48. }
  49. public void setName(String name) {
  50. this.name = name;
  51. }
  52. public int getAge() {
  53. return age;
  54. }
  55. public void setAge(int age) {
  56. this.age = age;
  57. }
  58. public BigDecimal getBalance() {
  59. return balance;
  60. }
  61. public void setBalance(BigDecimal balance) {
  62. this.balance = balance;
  63. }
  64. public User(String id, String name, int age) {
  65. super();
  66. this.id = id;
  67. this.name = name;
  68. this.age = age;
  69. }
  70. }
  71. }

效果截图

watermark_type_d3F5LXplbmhlaQ_shadow_50_text_Q1NETiBA5Zyo5aWL5paX55qE5aSn6YGT_size_20_color_FFFFFF_t_70_g_se_x_16

发表评论

表情:
评论列表 (有 0 条评论,149人围观)

还没有评论,来说两句吧...

相关阅读