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);
	}
}