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)編寫(xiě)代碼。 下面是一個(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è)問(wèn)題,可以使用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)文章
Java通過(guò)MyBatis框架對(duì)MySQL數(shù)據(jù)進(jìn)行增刪查改的基本方法
MyBatis框架由Java的JDBC API進(jìn)一步封裝而來(lái),在操作數(shù)據(jù)庫(kù)方面效果拔群,接下來(lái)我們就一起來(lái)看看Java通過(guò)MyBatis框架對(duì)MySQL數(shù)據(jù)進(jìn)行增刪查改的基本方法:2016-06-06Java獲取視頻時(shí)長(zhǎng)及截取幀截圖詳解
這篇文章主要介紹了Java獲取視頻時(shí)長(zhǎng)及截取幀截圖詳解,以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。,需要的朋友可以參考下2019-06-06詳解SpringBoot修改啟動(dòng)端口server.port的四種方式
這篇文章主要介紹了詳解SpringBoot修改啟動(dòng)端口server.port的四種方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07Java設(shè)計(jì)模式之監(jiān)聽(tīng)器模式實(shí)例詳解
這篇文章主要介紹了Java設(shè)計(jì)模式之監(jiān)聽(tīng)器模式,結(jié)合實(shí)例形式較為詳細(xì)的分析了java設(shè)計(jì)模式中監(jiān)聽(tīng)器模式的概念、原理及相關(guān)實(shí)現(xiàn)與使用技巧,需要的朋友可以參考下2018-02-02java實(shí)現(xiàn)同步回調(diào)的示例代碼
同步回調(diào)是一種在調(diào)用代碼中同步執(zhí)行回調(diào)函數(shù)的編程模式,在Java中,通過(guò)定義和實(shí)現(xiàn)接口來(lái)構(gòu)建同步回調(diào),本文就來(lái)介紹一下如何實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2024-09-09JAVA8 List<List<Integer>> list中再裝一個(gè)list轉(zhuǎn)成一個(gè)list操
這篇文章主要介紹了JAVA8 List<List<Integer>> list中再裝一個(gè)list轉(zhuǎn)成一個(gè)list操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-08-08