Java集合的組內(nèi)平均值的計(jì)算方法總結(jié)
1. 使用Java 8 Stream API
Java 8引入了Stream API,它提供了一種簡(jiǎn)潔、高效的方式來(lái)處理集合數(shù)據(jù)。可以使用Stream API來(lái)計(jì)算集合的組內(nèi)平均值。 假設(shè)有一個(gè)List<Integer>類型的集合,其中每個(gè)元素代表一個(gè)組的數(shù)值??梢允褂?code>stream()方法將集合轉(zhuǎn)換為流,然后使用mapToInt()方法將流中的每個(gè)元素映射為整數(shù),最后使用average()方法計(jì)算平均值。 下面是一個(gè)示例代碼:
import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
double average = numbers.stream().mapToInt(Integer::intValue).average().orElse(0.0);
System.out.println("Average: " + average);
}
}
在上面的示例中,首先創(chuàng)建了一個(gè)包含整數(shù)的列表numbers。然后,使用stream()方法將列表轉(zhuǎn)換為流,并使用mapToInt()方法將流中的每個(gè)元素映射為整數(shù)。接下來(lái),使用average()方法計(jì)算平均值,并將結(jié)果存儲(chǔ)在average變量中。打印出平均值。
2. 使用Java 8 Lambda表達(dá)式
除了使用Stream API,還可以使用Java 8的Lambda表達(dá)式來(lái)計(jì)算集合的組內(nèi)平均值。Lambda表達(dá)式提供了一種更簡(jiǎn)潔、更靈活的方式來(lái)編寫代碼。 下面是一個(gè)使用Lambda表達(dá)式的示例代碼:
import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
double average = numbers.stream().mapToInt(i -> i).average().orElse(0.0);
System.out.println("Average: " + average);
}
}
在上面的示例中,使用了Lambda表達(dá)式i -> i來(lái)代替顯式的類型轉(zhuǎn)換。這個(gè)Lambda表達(dá)式接受一個(gè)參數(shù)i,并將其作為返回值。這樣,就可以直接使用average()方法計(jì)算平均值。
3. 使用Java 8 Optional類
在上述示例中,使用了average()方法的orElse()方法來(lái)處理空集合的情況。orElse()方法接受一個(gè)默認(rèn)值,當(dāng)流為空時(shí),它將返回該默認(rèn)值。 然而,average()方法返回的是一個(gè)OptionalDouble對(duì)象,而不是一個(gè)基本類型的值。為了獲取平均值,需要使用OptionalDouble對(duì)象的getAsDouble()方法。但是,如果流為空,getAsDouble()方法將拋出NoSuchElementException異常。 為了避免這個(gè)問題,可以使用Java 8的Optional類來(lái)處理空集合的情況。Optional類提供了一個(gè)更優(yōu)雅的方式來(lái)處理可能為空的值。 下面是一個(gè)使用Optional類的示例代碼:
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
public class Main {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
OptionalDouble average = numbers.stream().mapToInt(i -> i).average();
if (average.isPresent()) {
System.out.println("Average: " + average.getAsDouble());
} else {
System.out.println("No elements in the stream");
}
}
}
在上面的示例中,使用了OptionalDouble對(duì)象來(lái)存儲(chǔ)平均值。然后,使用isPresent()方法檢查流是否為空。如果流不為空,使用getAsDouble()方法獲取平均值,并將其打印出來(lái)。否則,打印出一條消息表示流為空。
4. 使用Java 8 Comparator接口
除了計(jì)算集合的組內(nèi)平均值,還可以使用Java 8的Comparator接口來(lái)對(duì)集合進(jìn)行排序。Comparator接口提供了一種通用的方式來(lái)比較兩個(gè)對(duì)象的大小。 下面是一個(gè)使用Comparator接口的示例代碼:
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(5, 3, 1, 4, 2);
numbers.sort(Comparator.comparingInt(i -> i));
System.out.println("Sorted numbers: " + numbers);
}
}
在上面的示例中,創(chuàng)建了一個(gè)包含整數(shù)的列表numbers。然后,使用sort()方法對(duì)列表進(jìn)行排序,并傳入一個(gè)Comparator對(duì)象。在這個(gè)例子中,使用Comparator.comparingInt()方法創(chuàng)建一個(gè)Comparator對(duì)象,該對(duì)象根據(jù)元素的整數(shù)值進(jìn)行比較。打印出排序后的列表。
5. 使用Java 8 Collections類
Java 8還引入了一個(gè)新的Collections類,它提供了一些靜態(tài)方法來(lái)操作集合。Collections類中的max()方法和min()方法可以用來(lái)找到集合中的最大值和最小值。 下面是一個(gè)使用Collections類的示例代碼:
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(5, 3, 1, 4, 2);
int max = Collections.max(numbers);
int min = Collections.min(numbers);
System.out.println("Max: " + max);
System.out.println("Min: " + min);
}
}
在上面的示例中,創(chuàng)建了一個(gè)包含整數(shù)的列表numbers。然后,使用Collections.max()方法找到列表中的最大值,并將其存儲(chǔ)在max變量中。同樣,使用Collections.min()方法找到列表中的最小值,并將其存儲(chǔ)在min變量中。打印出最大值和最小值。
6. 使用Java 8 Parallel Streams
Java 8還引入了Parallel Streams,它提供了一種并行處理集合數(shù)據(jù)的方式。Parallel Streams可以利用多核處理器的優(yōu)勢(shì),提高集合操作的性能。 下面是一個(gè)使用Parallel Streams的示例代碼:
import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(5, 3, 1, 4, 2);
long sum = numbers.parallelStream().mapToLong(i -> i).sum();
System.out.println("Sum: " + sum);
}
}
在上面的示例中,使用parallelStream()方法將列表轉(zhuǎn)換為并行流。然后,使用mapToLong()方法將流中的每個(gè)元素映射為長(zhǎng)整數(shù)。接下來(lái),使用sum()方法計(jì)算總和,并將結(jié)果存儲(chǔ)在sum變量中。打印出總和。
7. 使用Java 8 Stream API和Lambda表達(dá)式的組合
可以結(jié)合使用Stream API和Lambda表達(dá)式來(lái)計(jì)算集合的組內(nèi)平均值。下面是一個(gè)示例代碼:
import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(5, 3, 1, 4, 2);
double average = numbers.stream().mapToInt(i -> i).average().orElse(0.0);
System.out.println("Average: " + average);
}
}
在上面的示例中,首先創(chuàng)建了一個(gè)包含整數(shù)的列表numbers。然后,使用stream()方法將列表轉(zhuǎn)換為流,并使用mapToInt()方法將流中的每個(gè)元素映射為整數(shù)。接下來(lái),使用average()方法計(jì)算平均值,并將結(jié)果存儲(chǔ)在average變量中。打印出平均值。
8. 使用Java 8 Stream API和Optional類的組合
可以結(jié)合使用Stream API和Optional類來(lái)計(jì)算集合的組內(nèi)平均值。下面是一個(gè)示例代碼:
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(5, 3, 1, 4, 2);
OptionalDouble average = numbers.stream().mapToInt(i -> i).average();
if (average.isPresent()) {
System.out.println("Average: " + average.getAsDouble());
} else {
System.out.println("No elements in the stream");
}
}
}
在上面的示例中,首先創(chuàng)建了一個(gè)包含整數(shù)的列表numbers。然后,使用stream()方法將列表轉(zhuǎn)換為流,并使用mapToInt()方法將流中的每個(gè)元素映射為整數(shù)。接下來(lái),使用average()方法計(jì)算平均值,并將結(jié)果存儲(chǔ)在OptionalDouble對(duì)象中。然后,使用isPresent()方法檢查流是否為空。如果流不為空,使用getAsDouble()方法獲取平均值,并將其打印出來(lái)。否則,打印出一條消息表示流為空。
以上就是Java集合的組內(nèi)平均值的計(jì)算方法總結(jié)的詳細(xì)內(nèi)容,更多關(guān)于Java集合組內(nèi)平均值計(jì)算的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
將RestTemplate的編碼格式改為UTF-8,防止亂碼問題
這篇文章主要介紹了將RestTemplate的編碼格式改為UTF-8,防止亂碼問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10
Java經(jīng)典設(shè)計(jì)模式之責(zé)任鏈模式原理與用法詳解
這篇文章主要介紹了Java經(jīng)典設(shè)計(jì)模式之責(zé)任鏈模式,簡(jiǎn)單說(shuō)明了責(zé)任鏈模式的概念、原理,并結(jié)合實(shí)例形式分析了java實(shí)現(xiàn)責(zé)任鏈模式的具體用法與相關(guān)注意事項(xiàng),需要的朋友可以參考下2017-08-08
MyBatis中SqlSession實(shí)現(xiàn)增刪改查案例
這篇文章主要介紹了MyBatis中SqlSession實(shí)現(xiàn)增刪改查案例,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-03-03
詳解springboot整合ehcache實(shí)現(xiàn)緩存機(jī)制
這篇文章主要介紹了詳解springboot整合ehcache實(shí)現(xiàn)緩存機(jī)制,ehcache提供了多種緩存策略,主要分為內(nèi)存和磁盤兩級(jí),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01
Java動(dòng)態(tài)代理之?dāng)r截器的應(yīng)用
今天小編就為大家分享一篇關(guān)于Java動(dòng)態(tài)代理之?dāng)r截器的應(yīng)用,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-01-01
Java 普通代碼塊靜態(tài)代碼塊執(zhí)行順序(實(shí)例講解)
下面小編就為大家?guī)?lái)一篇Java 普通代碼塊靜態(tài)代碼塊執(zhí)行順序(實(shí)例講解)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧2017-08-08
SpringBoot任務(wù)之定時(shí)任務(wù)相關(guān)知識(shí)總結(jié)
今天給大家整理的文章是SpringBoot定時(shí)任務(wù)的相關(guān)知識(shí)點(diǎn),文中有非常詳細(xì)的介紹及代碼示例,對(duì)正在學(xué)習(xí)SpringBoot任務(wù)的小伙伴們很有幫助,需要的朋友可以參考下2021-06-06
java大數(shù)乘法的簡(jiǎn)單實(shí)現(xiàn) 浮點(diǎn)數(shù)乘法運(yùn)算
大數(shù)乘法可以進(jìn)行任意大小和精度的整數(shù)和浮點(diǎn)數(shù)的乘法運(yùn)算, 精確度很高, 可以用作經(jīng)融等領(lǐng)域的計(jì)算,這個(gè)是我看了一些資料, 然后自己整理實(shí)現(xiàn)的,簡(jiǎn)單測(cè)試了一下2014-01-01
SpringBoot使用mybatis-plus分頁(yè)查詢無(wú)效的問題解決
MyBatis-Plus提供了很多便捷的功能,包括分頁(yè)查詢,本文主要介紹了SpringBoot使用mybatis-plus分頁(yè)查詢無(wú)效的問題解決,具有一定的參考價(jià)值,感興趣的可以了解一下2023-12-12

