Java 8 Collector 示例
时间:2020-02-23 14:34:52 来源:igfitidea点击:
在本教程中,我们将看到Java 8 Collector 示例。
我们可以执行各种操作,如平均值,计数,GroupBy,在收集器的帮助下对列表进行排序。
Counting:
计数用于计数流中的元素数。
返回收集器实例可以通过收集方法接受。
package org.igi.theitroad; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; public class Java8CollectorsExample { public static void main(String[] args) { List intList=Arrays.asList(10,20,30,40,50); //Counting long count = intList.stream().collect(Collectors.counting()); System.out.println(count); } }
运行上面的代码时,我们将得到以下输出:
5
Averagesint:
AsveragesInt用于查找作为INT数据类型的流元素的平均值。
它返回收集器实例,可以通过收集方法接受。
package org.igi.theitroad; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; public class Java8CollectorsExample { public static void main(String[] args) { List intList=Arrays.asList(10,20,30,40,50); //Averaging int Double result1 = intList.stream().collect(Collectors.averagingInt(v->v)); System.out.println(result1); Double result2 = intList.stream().collect(Collectors.averagingInt(v->v*v)); System.out.println(result2); } }
运行上面的代码时,我们将得到以下输出:
30.0 1100.0
让我们了解你的案例1如何获得30:(10 + 20 + 30 + 40 + 50/5)= 150/5 = 30.0,现在我们必须想知道我们在第2个案例中获得1100的方式:(10 * 10 + 20 * 20 + 30 * 30 + 40 * 40 + 50 * 50)/5 = 5500/5 = 1100.0如果我们想了解更多关于v-> v * v,我们可以通过Java 8 Lambda表达式来类似地进行不同的功能不同的数据类型,如AverageDouble,verigeslong。
joining
joining方法用于与分隔符连接,也可以通过前缀和后缀。
package org.igi.theitroad; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; public class Java8CollectorsExample { public static void main(String[] args) { List NameList=Arrays.asList("igi","John","Martin"); //Counting String stringWithHyphen = NameList.stream().collect(Collectors.joining("-")); System.out.println("String with hyphen : "+stringWithHyphen); String stringWithHyphenAndPrefixAndSuffix = NameList.stream().collect(Collectors.joining("-","==","==")); System.out.println("String with hyphen , suffix and prefix : "+stringWithHyphenAndPrefixAndSuffix); } }
运行上面的代码时,我们将得到以下输出:
字符串用连字符:igi-John-Martin字符串用连字符,后缀和前缀:== igi-John-Martin ==
summingint:
summingint用于查找作为int数据类型的流元素的和。
它返回收集器实例,可以通过收集方法接受。
package org.igi.theitroad; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; public class Java8CollectorsExample { public static void main(String[] args) { List intList=Arrays.asList(10,20,30,40,50); //Averaging int Double result1 = intList.stream().collect(Collectors.summingInt(v->v)); System.out.println(result1); Double result2 = intList.stream().collect(Collectors.summingInt(v->v*v)); System.out.println(result2); } }
同样,我们对不同的数据类型具有不同的功能,例如summingdouble,summinglong。
CollectingAndthen:
collectingandthen:用于获取收集器实例并在其顶部执行完成功能。
package org.igi.theitroad; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; public class Java8CollectorsExample { public static void main(String[] args) { List intList=Arrays.asList(10,20,30,40,50); //collectingAndThen int result1 = intList.stream().collect(Collectors.collectingAndThen(Collectors.summingInt(v->(int)v),result->result/2)); System.out.println(result1); } }