import java.util.Arrays;
import java.util.IntSummaryStatistics;
import java.util.List;
import java.util.Map;
import java.util.StringJoiner;
import java.util.stream.Collector;
import java.util.stream.Collectors; public class Streams10 { static class Person {
String name;
int age; Person(String name, int age) {
this.name = name;
this.age = age;
} @Override
public String toString() {
return name;
}
} public static void main(String[] args) {
List<Person> persons =
Arrays.asList(
new Person("Max", 18),
new Person("Peter", 23),
new Person("Pamela", 23),
new Person("David", 12)); // test1(persons);
// test2(persons);
// test3(persons);
// test4(persons);
// test5(persons);
// test6(persons);
// test7(persons);
// test8(persons);
test9(persons);
} private static void test1(List<Person> persons) {
List<Person> filtered =
persons
.stream()
.filter(p -> p.name.startsWith("P"))
.collect(Collectors.toList()); System.out.println(filtered); // [Peter, Pamela]
} private static void test2(List<Person> persons) {
Map<Integer, List<Person>> personsByAge = persons
.stream()
.collect(Collectors.groupingBy(p -> p.age)); personsByAge
.forEach((age, p) -> System.out.format("age %s: %s\n", age, p)); // age 18: [Max]
// age 23:[Peter, Pamela]
// age 12:[David]
} private static void test3(List<Person> persons) {
Double averageAge = persons
.stream()
.collect(Collectors.averagingInt(p -> p.age)); System.out.println(averageAge); // 19.0
} private static void test4(List<Person> persons) {
IntSummaryStatistics ageSummary =
persons
.stream()
.collect(Collectors.summarizingInt(p -> p.age)); System.out.println(ageSummary);
// IntSummaryStatistics{count=4, sum=76, min=12, average=19,000000, max=23}
} private static void test5(List<Person> persons) {
String names = persons
.stream()
.filter(p -> p.age >= 18)
.map(p -> p.name)
.collect(Collectors.joining(" and ", "In Germany ", " are of legal age.")); System.out.println(names);
// In Germany Max and Peter and Pamela are of legal age.
} private static void test6(List<Person> persons) {
Map<Integer, String> map = persons
.stream()
.collect(Collectors.toMap(
p -> p.age,
p -> p.name,
(name1, name2) -> name1 + ";" + name2)); System.out.println(map);
// {18=Max, 23=Peter;Pamela, 12=David}
} private static void test7(List<Person> persons) {
Collector<Person, StringJoiner, String> personNameCollector =
Collector.of(
() -> new StringJoiner(" | "), // supplier
(j, p) -> j.add(p.name.toUpperCase()), // accumulator
(j1, j2) -> j1.merge(j2), // combiner
StringJoiner::toString); // finisher String names = persons
.stream()
.collect(personNameCollector); System.out.println(names); // MAX | PETER | PAMELA | DAVID
} private static void test8(List<Person> persons) {
Collector<Person, StringJoiner, String> personNameCollector =
Collector.of(
() -> {
System.out.println("supplier");
return new StringJoiner(" | ");
},
(j, p) -> {
System.out.format("accumulator: p=%s; j=%s\n", p, j);
j.add(p.name.toUpperCase());
},
(j1, j2) -> {
System.out.println("merge");
return j1.merge(j2);
},
j -> {
System.out.println("finisher");
return j.toString();
}); String names = persons
.stream()
.collect(personNameCollector); System.out.println(names); // MAX | PETER | PAMELA | DAVID
} private static void test9(List<Person> persons) {
Collector<Person, StringJoiner, String> personNameCollector =
Collector.of(
() -> {
System.out.println("supplier");
return new StringJoiner(" | ");
},
(j, p) -> {
System.out.format("accumulator: p=%s; j=%s\n", p, j);
j.add(p.name.toUpperCase());
},
(j1, j2) -> {
System.out.println("merge");
return j1.merge(j2);
},
j -> {
System.out.println("finisher");
return j.toString();
}); String names = persons
.parallelStream()
.collect(personNameCollector); System.out.println(names); // MAX | PETER | PAMELA | DAVID
}
}

最新文章

  1. CSS3自定义滚动条样式 -webkit-scrollbar
  2. One Night Ultimate Werewolf Daybreak
  3. 队列 Soldier and Cards
  4. sdutoj 2609 A-Number and B-Number
  5. ErrorCode枚举类型返回错误码信息测试,手动抛出异常信息,在事务中根据错误码来回滚事务的思路。
  6. BootStrap2学习日记19---缩略图
  7. org.springframework.beans.factory.BeanCreationException: 求教育!
  8. orcl 行转列的存储过程
  9. SSD的优势
  10. MFC/VC CxImage 简单配置与使用 (完整版)
  11. 一键批量ping任意ip段的存活主机
  12. 教大家怎样给UITextView加入placeholder扩展
  13. HTTP请求到爬虫代码的终南捷径
  14. 学习了clipboard复制剪切插件的使用
  15. 解决Spring Boot OTS parsing error: Failed to convert WOFF 2.0
  16. python isinstance()方法的使用
  17. 慕课网,vue高仿饿了吗ASP源码视频笔记
  18. eclipse导入maven工程missing artifact(实际是存在的)错误解决
  19. jquery根据字符切割字符串
  20. Codeforces Round #423 (Div. 2, rated, based on VK Cup Finals) C 并查集

热门文章

  1. Reactor系列(十)collectMap集合
  2. table固定头部,tbody内容滚动
  3. 什么是阿里云CDN
  4. 【调试经验】C++和C的混合编程以及库调用
  5. k8s-helm安装
  6. 使用canal获取mysql的binlog传输给kafka,并交由logstash获取实验步骤
  7. Dual 表
  8. VBA学习资料分享-2
  9. php--最新正则(手机号码)
  10. redis 交集、并集、差集