Java mapToInt()方法使用小结

 更新时间:2025年11月24日 10:18:54   作者:Geoking.  
本文介绍了Java 8中Stream API中的mapToInt()方法,它可以将对象流转换为整型流,从而方便地进行求和、求平均值、求最大值/最小值等操作,具有一定的参考价值,感兴趣的可以了解一下

一、用途

在 Java 8 引入 Stream API 之后,集合处理变得更函数式、更简洁。
在处理对象集合时经常需要把对象中的某个字段(年龄、数量、价格等)提取成整型流(IntStream),以便:

  • 快速求和(sum()
  • 求平均值(average()
  • 求最大值/最小值(max() / min()
  • 转换为基本类型数组(toArray()

要完成这些操作,最常用的方法之一就是 —— mapToInt()

二、什么是mapToInt()?

mapToInt()Stream 接口中的一个终极武器,它可以将 Stream 转换为 IntStream

方法签名如下:

IntStream mapToInt(ToIntFunction<? super T> mapper);

功能总结:

将对象流中的元素映射为 int 类型,返回 IntStream

三、mapToInt()有什么用?

1. 将对象集合转换为整型流

例如:把 List<Person> 中的年龄转换为 IntStream

2. 使用 IntStream 的快速计算

例如:

  • .sum()
  • .average()
  • .max()
  • .min()
  • .toArray()

这些是普通 Stream 没有的强大方法。

3. 避免自动装箱 / 拆箱,提高性能

IntStream 是基础类型流,不涉及 Integer 的装箱操作,性能更高。

四、基本用法示例

示例:提取对象字段为整型流

class Person {
    private String name;
    private int age;
    
    Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    
    public int getAge() {
        return age;
    }
}

public class Demo {
    public static void main(String[] args) {
        List<Person> people = List.of(
            new Person("Tom", 18),
            new Person("Jerry", 20),
            new Person("Alice", 22)
        );

        IntStream ages = people.stream()
                .mapToInt(Person::getAge);

        ages.forEach(System.out::println);
    }
}

输出:

18
20
22

五、典型应用场景

1. 求和:sum()

int totalAge = people.stream()
        .mapToInt(Person::getAge)
        .sum();

System.out.println(totalAge); // 60

2. 求平均值:average()

double avgAge = people.stream()
        .mapToInt(Person::getAge)
        .average()
        .orElse(0);

System.out.println(avgAge); // 20.0

3. 求最大值 / 最小值

int maxAge = people.stream()
        .mapToInt(Person::getAge)
        .max()
        .orElse(-1);

int minAge = people.stream()
        .mapToInt(Person::getAge)
        .min()
        .orElse(-1);

System.out.println(maxAge); // 22
System.out.println(minAge); // 18

4. 转为int[]

int[] arr = people.stream()
        .mapToInt(Person::getAge)
        .toArray();

System.out.println(Arrays.toString(arr));
// 输出: [18, 20, 22]

六、使用 Lambda 表达式

除了方法引用,也可以使用 Lambda:

int total = people.stream()
        .mapToInt(p -> p.getAge())
        .sum();

但一般用方法引用更方便,这是 Java 8 引入的方法引用(Method Reference),它是一种简化 Lambda 表达式的语法形式。

七、与map()的区别

方法返回类型用途
map()Stream<R>返回对象流
mapToInt()IntStream返回整型流,适合数学计算

示例:

Stream<Integer> stream1 = people.stream()
        .map(Person::getAge); // 装箱 Integer,不适合大量计算

IntStream stream2 = people.stream()
        .mapToInt(Person::getAge); // 基本类型 int 流,高性能

八、实战案例:计算商品总价格

class Item {
    private String name;
    private int price;

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

    public int getPrice() {
        return price;
    }
}

public class Demo {
    public static void main(String[] args) {
        List<Item> items = List.of(
            new Item("Book", 30),
            new Item("Pen", 5),
            new Item("Bag", 60)
        );

        int totalPrice = items.stream()
                .mapToInt(Item::getPrice)
                .sum();

        System.out.println("总价格:" + totalPrice);
    }
}

输出:

总价格:95

到此这篇关于Java mapToInt()方法详解的文章就介绍到这了,更多相关Java mapToInt()内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 手把手教你SpringBoot轻松整合Minio

    手把手教你SpringBoot轻松整合Minio

    这篇文章主要介绍了手把手教你SpringBoot轻松整合Minio的方法,帮助大家更好的理解和使用springboot框架,感兴趣的朋友可以了解下
    2021-01-01
  • MyBatis批量插入数据的三种方法实例

    MyBatis批量插入数据的三种方法实例

    由于项目需要生成多条数据,并保存到数据库当中,项目使用了Spring+MyBatis,所以打算使用MyBatis批量插入,应该要比循环插入的效果更好,下面这篇文章主要给大家介绍了关于MyBatis批量插入数据的三种方法,需要的朋友可以参考下
    2021-10-10
  • Spring Boot缓存问题分析及解决方案

    Spring Boot缓存问题分析及解决方案

    SpringBoot提供缓存支持,提升应用性能,但可能出现缓存不一致、缓存穿透、缓存击穿等问题,分析了缓存基本概念、SpringBoot缓存支持、常见缓存问题及解决方案,感兴趣的朋友跟随小编一起看看吧
    2024-09-09
  • ArrayList及HashMap的扩容规则讲解

    ArrayList及HashMap的扩容规则讲解

    今天小编就为大家分享一篇关于ArrayList及HashMap的扩容规则讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-02-02
  • spring boot-2.1.16整合swagger-2.9.2 含yml配置文件的代码详解

    spring boot-2.1.16整合swagger-2.9.2 含yml配置文件的代码详解

    这篇文章主要介绍了spring boot-2.1.16整合swagger-2.9.2 含yml配置文件,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08
  • java遍历途中修改数据及删除数据的方法总结

    java遍历途中修改数据及删除数据的方法总结

    在使用java的集合类遍历数据的时候,在某些情况下可能需要对某些数据进行删除,下面这篇文章主要给大家介绍了关于java遍历途中修改数据及删除数据的方法总结,需要的朋友可以参考下
    2023-10-10
  • Java Swing实现让窗体居中显示的方法示例

    Java Swing实现让窗体居中显示的方法示例

    这篇文章主要介绍了Java Swing实现让窗体居中显示的方法,结合实例形式分析了swing使用setBounds方法控制窗口布局的相关操作技巧,需要的朋友可以参考下
    2017-11-11
  • java实现页面置换算法

    java实现页面置换算法

    这篇文章主要为大家详细介绍了java实现页面置换算法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-08-08
  • 使用Java DOM解析器修改XML文件内容的操作方法

    使用Java DOM解析器修改XML文件内容的操作方法

    在Java中,XML文件的解析和修改可以通过多种方法实现,其中DOM(Document Object Model)是一种常用的方式,在本文中,我们将介绍如何使用Java DOM解析器修改XML文件中的内容,并给出一个具体的示例,需要的朋友可以参考下
    2024-08-08
  • Springboot重写addInterceptors()方法配置拦截器实例

    Springboot重写addInterceptors()方法配置拦截器实例

    这篇文章主要介绍了Springboot重写addInterceptors()方法配置拦截器实例,spring boot抛弃了复杂的xml配置,我们可以自定义配置类(标注@Configuration注解的类)来实现WebMvcConfigurer接口,并重写addInterceptors()方法来配置拦截器,需要的朋友可以参考下
    2023-09-09

最新评论