Java?mapToInt()方法使用小結(jié)
一、用途
在 Java 8 引入 Stream API 之后,集合處理變得更函數(shù)式、更簡潔。
在處理對象集合時經(jīng)常需要把對象中的某個字段(年齡、數(shù)量、價格等)提取成整型流(IntStream),以便:
- 快速求和(
sum()) - 求平均值(
average()) - 求最大值/最小值(
max()/min()) - 轉(zhuǎn)換為基本類型數(shù)組(
toArray())
要完成這些操作,最常用的方法之一就是 —— mapToInt()。
二、什么是mapToInt()?
mapToInt() 是 Stream 接口中的一個終極武器,它可以將 Stream 轉(zhuǎn)換為 IntStream。
方法簽名如下:
IntStream mapToInt(ToIntFunction<? super T> mapper);
功能總結(jié):
將對象流中的元素映射為 int 類型,返回 IntStream。
三、mapToInt()有什么用?
1. 將對象集合轉(zhuǎn)換為整型流
例如:把 List<Person> 中的年齡轉(zhuǎn)換為 IntStream。
2. 使用 IntStream 的快速計算
例如:
.sum().average().max().min().toArray()
這些是普通 Stream 沒有的強大方法。
3. 避免自動裝箱 / 拆箱,提高性能
IntStream 是基礎(chǔ)類型流,不涉及 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
五、典型應(yīng)用場景
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. 轉(zhuǎn)為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()的區(qū)別
| 方法 | 返回類型 | 用途 |
|---|---|---|
| map() | Stream<R> | 返回對象流 |
| mapToInt() | IntStream | 返回整型流,適合數(shù)學(xué)計算 |
示例:
Stream<Integer> stream1 = people.stream()
.map(Person::getAge); // 裝箱 Integer,不適合大量計算
IntStream stream2 = people.stream()
.mapToInt(Person::getAge); // 基本類型 int 流,高性能
八、實戰(zhàn)案例:計算商品總價格
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
到此這篇關(guān)于Java mapToInt()方法詳解的文章就介紹到這了,更多相關(guān)Java mapToInt()內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
關(guān)于@RequestParam注解的使用(簡單易懂)
這篇文章主要介紹了關(guān)于@RequestParam注解的使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-01-01
Java 判斷字符串a(chǎn)和b是否互為旋轉(zhuǎn)詞
本篇文章主要介紹了判斷字符串a(chǎn)和b是否互為旋轉(zhuǎn)詞的相關(guān)知識,具有很好的參考價值。下面跟著小編一起來看下吧2017-05-05
idea自帶database連接mysql失敗問題的解決辦法
在IDEA?帶的數(shù)據(jù)庫連接?具中,可以連接MySQL數(shù)據(jù)庫,但是有的時候連接出現(xiàn)錯誤,連接不上數(shù)據(jù)庫,下面這篇文章主要給大家介紹了關(guān)于idea自帶database連接mysql失敗問題的解決辦法,需要的朋友可以參考下2023-06-06
解析Springboot集成Tile38客戶端之Set命令實現(xiàn)示例
這篇文章主要為大家介紹了解析Springboot集成Tile38客戶端之Set命令實現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-08-08
java jni調(diào)用c函數(shù)實例分享(java調(diào)用c函數(shù))
Java代碼中調(diào)用C/C++代碼,當(dāng)然是使用JNI,JNI是Java native interface的簡寫,可以譯作Java原生接口,下面看實例吧2013-12-12

