文章目录
- 1.`Stream.collect()`使用供应者(`supplier`)、累加器(`accumulator `)和组合器(`combiner `)
- 2.`Stream.collect()`使用收集器(`Collector`)
- 3.`Stream.collect()`和`Collectors.joining()`一起使用
- 4.`Stream.collect()`和`Collectors.averagingInt()`一起使用
- 5.`Stream.collect()`和`Collectors.counting()`一起使用
- 6.`Stream.collect()`和`Collectors.toList()`一起使用
- 7.`Stream.collect()`和`Collectors.toMap()`一起使用
- 参考文献
在本页中,我们将提供
java 8 Stream collect()
示例。
对可变流元素执行此操作,流元素通过更新而不是替换来合并到结果中。
Stream.collect()
使用lambda
表达式将一个参数用作收集器(collector
),或将三个参数用作供应者(supplier
)、累加器(accumulator
)和组合器(combiner
)。
这里我们将讨论几个重载函数的例子。
1.Stream.collect()
使用供应者(supplier
)、累加器(accumulator
)和组合器(combiner
)
语法如下:
collect(Supplier supplier, BiConsumer accumulator, BiConsumer combiner)
supplier:它创建一个新的结果容器,由累加器(accumulator
)和组合器(combiner
)填充,最后由collect()
方法返回。在并行处理中,将多次调用Supplier
函数,每次都将返回新值。
accumulator:它在结果中加入了额外的元素。
combiner:它组合了两个必须与累加器兼容的值。组合器(combiner
)工作在并行处理中。
下面是示例
StreamCollect.java
package com.concretepage;
import java.util.Arrays;
import java.util.List;
public class StreamCollect {
public static void main(String[] args) {
List<String> list = Arrays.asList("Mukesh", "Vishal", "Amar");
String result = list.parallelStream().collect(StringBuilder::new,
(response, element) -> response.append(" ").append(element),
(response1, response2) -> response1.append(",").append(response2.toString()))
.toString();
System.out.println("Result: " + result);
}
}
输出
Result: Mukesh, Vishal, Amar
如果我们使用list.stream()
则输出将不同,因为它不是并行处理,因此没有任何内容可以组合。
Result: Mukesh Vishal Amar
2.Stream.collect()
使用收集器(Collector
)
Stream.collect()
也接受单个参数。
collect(Collector collector)
执行求和、分组、联接等许多操作是很有用的。下面是求和的示例。
SumOfListDemo.java
package com.concretepage;
import java.util.Arrays;
import java.util.IntSummaryStatistics;
import java.util.List;
import java.util.stream.Collectors;
public class SumOfListDemo {
public static void main(String[] args) {
List<Integer> list = Arrays.asList(23, 43, 12, 25);
IntSummaryStatistics stats = list.stream()
.collect(Collectors.summarizingInt(i -> i + i));
System.out.println("Sum:"+stats.getSum());
}
}
输出
Sum:206
3.Stream.collect()
和Collectors.joining()
一起使用
JoiningExample.java
package com.concretepage;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class JoiningExample {
public static void main(String[] args) {
List<String> list = Arrays.asList("Ram","Shyam","Shiv","Mahesh");
String result= list.stream().collect(Collectors.joining(", "));
System.out.println("Joining Result: "+ result);
}
}
输出
Joining Result: Ram, Shyam, Shiv, Mahesh
4.Stream.collect()
和Collectors.averagingInt()
一起使用
AveragingIntExample.java
package com.concretepage;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class AveragingIntExample {
public static void main(String[] args) {
List<Integer> list = Arrays.asList(1,2,3,4);
Double result = list.stream().collect(Collectors.averagingInt(v->v*2));
System.out.println("Average: "+result);
}
}
输出
Average: 5.0
5.Stream.collect()
和Collectors.counting()
一起使用
CountingExample.java
package com.concretepage;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class CountingExample {
public static void main(String[] args) {
List<Integer> list = Arrays.asList(1,2,3,4);
long result= list.stream().collect(Collectors.counting());
System.out.println("Count: "+ result);
}
}
输出
Count: 4
6.Stream.collect()
和Collectors.toList()
一起使用
ToListExample.java
package com.concretepage;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class ToListExample {
public static void main(String[] args) {
String[] strArray = {"AA", "BB", "CC"};
List<String> list = Arrays.stream(strArray).collect(Collectors.toList());
list.forEach(s->System.out.println(s));
}
}
输出
AA
BB
CC
7.Stream.collect()
和Collectors.toMap()
一起使用
ToMapExample.java
package com.concretepage;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class ToMapExample {
public static void main(String[] args) {
List<Person> list = new ArrayList<>();
list.add(new Person(100, "Mohan"));
list.add(new Person(200, "Sohan"));
list.add(new Person(300, "Mahesh"));
Map<Integer, String> map = list.stream()
.collect(Collectors.toMap(Person::getId, Person::getName));
map.forEach((x, y) -> System.out.println("Key: " + x +", value: "+ y));
}
}
Person.java
package com.concretepage;
public class Person {
private Integer id;
private String name;
public Person(Integer id, String name) {
this.id = id;
this.name = name;
}
public Integer getId() {
return id;
}
public String getName() {
return name;
}
}
输出
Key: 100, value: Mohan
Key: 200, value: Sohan
Key: 300, value: Mahesh