0  创建流

    public void test1(){
List<String> list = new ArrayList<>();
Stream<String> stream = list.stream(); Integer[] nums = new Integer[];
Stream<Integer> stream1 = Arrays.stream(nums); Stream<Integer> stream2 = Stream.of(,,,,,); Stream<Integer> stream3 = Stream.iterate(, (x) -> x + ).limit();
stream3.forEach(System.out::println); Stream<Double> stream4 = Stream.generate(Math::random).limit();
stream4.forEach(System.out::println);
}

1  合并多个流

    //合并多个流
private void merge() {
List<String> list = new ArrayList<String>();
list.add("I am a boy");
list.add("I love the girl");
list.add("But the girl loves another girl"); List<String> result = list.stream() //得到流
.map(line->line.split(" ")) //将每个元素转成String[]
.flatMap(Arrays::stream) //将每个String[] 转成流 ,并合并为一个大流
.distinct() //对元素去重
.collect(Collectors.toList()); //终止流得到集合
result.forEach(System.out::println); //打印
}

2  是否匹配任一元素

    //是否匹配任一元素
private void anyMatch() { List<Person> persons = Arrays.asList(new Person("zhangsan", ),new Person("lisi", ));
boolean isHas = persons.stream().anyMatch(e -> e.getAge() == );
System.out.println("isHas : "+isHas);
}

3  是否所有元素都匹配

    //是否所有元素都匹配
private void allMatch() { List<Person> persons = Arrays.asList(new Person("zhangsan", ),new Person("lisi", ));
boolean bool = persons.stream().allMatch(e -> e.getAge() == );
System.out.println("isHas : "+bool);
}

4  是否所有元素都不匹配

    //是否所有元素都不匹配
private void noneMatch() { List<Person> persons = Arrays.asList(new Person("zhangsan", ),new Person("lisi", ));
boolean bool = persons.stream().noneMatch(e -> e.getAge() == );
System.out.println("isHas : "+bool);
}

5 新增容器Optional ,可以避免空指针异常

    private void  orElse() {
Optional<Integer> optional2 = Optional.ofNullable(null);
System.out.println( optional2.orElse());
}

6  归并  reduce

    //归并
private void testReduce() {
List<Person> persons = Arrays.asList(new Person("zhangsan", ),new Person("lisi", ));
//reduce 不设置初始值
Optional<Integer> optional = persons.stream().map(e -> e.getAge()).reduce((a,b) -> a + b);
System.out.println(optional.get());
//reduce 设置初始值
Integer ageTotal = persons.stream().map(e -> e.getAge()).reduce(,(a,b) -> a + b);
System.out.println(ageTotal);
}

7  map  filter等操作

    private void commonTest() {
List<Integer> numbers = Arrays.asList(, , , , , , );
//forEach 遍历
numbers.stream().forEach(System.out::println); //map 映射每个元素到对应的结果
List<Integer> squaresList = numbers.stream().map(i -> i * i).distinct().collect(Collectors.toList());
squaresList.stream().forEach(System.out::println); //filter 过滤
List<Integer> filetrList = numbers.stream().filter(x -> x>).collect(Collectors.toList());
filetrList.stream().forEach(System.out::println); //limit 截取多少个
numbers.stream().limit().forEach(System.out::println); //sorted 排序
numbers.stream().sorted().forEach(System.out::println); //summaryStatistics 统计
IntSummaryStatistics statistics = numbers.stream().mapToInt(x -> x).summaryStatistics();
System.out.println(statistics.getMax());
System.out.println(statistics.getMin());
}

8  收集器

    //使用收集器
private void collector() { List<Person> persons = Arrays.asList(new Person("zhangsan", ),
new Person("lisi", ),new Person("wangwu", ),
new Person("zhaoliu", ),new Person("qianqi", ));
//统计个数
Long count = persons.stream().collect(Collectors.counting());
System.out.println(count); //计算最大值
Optional<Person> optional = persons.stream().collect(Collectors.maxBy(Comparator.comparingInt(Person::getAge)));
System.out.println(optional.get().getName()); //求和
Integer sum = persons.stream().collect(Collectors.summingInt(Person::getAge));
System.out.println(sum); //求平均值
Double average = persons.stream().collect(Collectors.averagingInt(Person::getAge));
System.out.println(average); //统计 最大值 , 最小值 , 平均值 , 和 , 个数
IntSummaryStatistics summary = persons.stream().collect(Collectors.summarizingInt(Person::getAge));
System.out.println(summary.getMax()); //连接字符串
String names = persons.stream().map(x -> x.getName()).collect(Collectors.joining(" | "));
System.out.println(names); //一般归约
Integer sumAge = persons.stream().collect(Collectors.reducing(, Person::getAge, (x , y) -> x + y ));
System.out.println(sumAge); //分组
Map<String, List<Person>> map = persons.stream().collect(Collectors.groupingBy((person) -> {
if(person.getAge() < ) {
return "small";
}else if(person.getAge() < ) {
return "middle";
}else {
return "larger";
}
}));
map.get("middle").forEach( x -> System.out.println(x.getName())); //分组并统计
Map<String, Long> map2 = persons.stream().collect(Collectors.groupingBy((person) -> {
if(person.getAge() < ) {
return "small";
}else if(person.getAge() < ) {
return "middle";
}else {
return "larger";
}
},
Collectors.counting()
));
map2.values().stream().forEach(System.out::println); //分区是分组的特殊情况
Map<Boolean, List<Person>> map3 = persons.stream().collect(Collectors.partitioningBy(x -> x.getAge() > ));
map3.get(false).forEach( x -> System.out.println(x.getName())); }

9  map 的使用,转换类型

    //map 可以将一个类型的集合转变为其他类型的集合
public void testMap() {
List<Integer> foo = Arrays.asList(,,,,);
List<Score> scores = foo.stream().map(e -> new Score(e))
.collect(Collectors.toList());
}
class Score {
int value ;
Score(int value){
this.value = value;
}
}

 

10 对流的操作


skip
filter 从流中排除某些元素。
map
flatMap
limit 截断流,使其元素不超过给定数量。
sort 排序
distinct 筛选,通过流所生成元素的 hashCode() 和 equals() 去除重复元素

allMatch——检查是否匹配所有元素
anyMatch——检查是否至少匹配一个元素
noneMatch——都不匹配或者stream为空时候,返回true
findFirst——返回第一个元素
findAny——返回当前流中的任意元素
count——返回流中元素的总个数
max——返回流中最大值
min——返回流中最小值


java8 流操作的更多相关文章

  1. JAVA8流操作

    * Stream 的三个操作步骤: * 1创建Stream * 2中间操作 * 3终止操作 package airycode_java8.nice6; import airycode_java8.ni ...

  2. java8 流操作 好文网址

    api 各方法详解(很不错!) http://blog.51cto.com/turnsole/2093185 api 各方法 简介: https://www.cnblogs.com/guguli/p/ ...

  3. 【java多线程】java8的流操作api和fork/join框架

    原文:https://blog.csdn.net/u011001723/article/details/52794455/ 一.测试一个案例,说明java8的流操作是并行操作 1.代码 package ...

  4. Java8中的流操作-基本使用&性能测试

    为获得更好的阅读体验,请访问原文:传送门 一.流(Stream)简介 流是 Java8 中 API 的新成员,它允许你以声明式的方式处理数据集合(通过查询语句来表达,而不是临时编写一个实现).这有点儿 ...

  5. Java 8-Lambda表达式、方法引用、标准函数接口与流操作、管道操作之间的关系

    1.Lambda表达式与接口之间的关系 只要Lambda表达式的声明形式与接口相一致,在很多情况下都可以替换接口.见如下代码 Thread t1 = new Thread(new Runnable() ...

  6. 公子奇带你进入Java8流的世界(二)

    在上一篇中我们带领大家简单的了解流的概念及使用场景,本节我们就来好好的介绍流的常见用法. 一.筛选和切片 对于一串流,我们有时需要取出我们需要的流中某些元素,主要是通过谓词筛选.看代码: 首先定义一个 ...

  7. 侠说java8--Stream流操作学习笔记,都在这里了

    前言 首次接触到Stream的时候以为它是和InputStream.OutputStream这样的输入输出流的统称. 流和集合的前世今生 概念的差异 在开发中,我们使用最多的类库之一就是集合.集合是一 ...

  8. 全面吃透JAVA Stream流操作,让代码更加的优雅

    全面吃透JAVA Stream流操作,让代码更加的优雅 在JAVA中,涉及到对数组.Collection等集合类中的元素进行操作的时候,通常会通过循环的方式进行逐个处理,或者使用Stream的方式进行 ...

  9. Node学习笔记(一):stream流操作

    NodeJs中谈及较多的可能就是Stream模块了,先写一个简单的ajax回调 $.post("index.php",{data:'aaa',order:'ccc'},functi ...

随机推荐

  1. java并发编程小结

    旭日Follow_24 的CSDN 博客 ,全文地址请点击: https://blog.csdn.net/xuri24/article/details/82078467 线程简介: 线程是操作系统调度 ...

  2. ThinkPHP登录功能的实现方法

    登陆功能是PHP程序设计中常见的功能.本文ThinkPHP实例主要完成注册成功后进入首页,并告诉你是登录用户的功能.具体实现步骤如下: 第一步:在config.php文件中加上: 完整实现代码如下: ...

  3. laravel表单验证

    效果展示:         代码 实现: 后台: use Validator; public function login() { if($input = Input::all()){ //验证提交的 ...

  4. K8s helm 创建自定义Chart

    # 删除之前创建的 chart helm list helm delete --purge redis1 # 创建自定义 chart myapp cd ~/helm helm create myapp ...

  5. CSS中默认被继承的属性

    在CSS中,所有属性都可以被继承,只需要显式的设置属性值为inherit即可.如果不设置该属性,CSS大部分属性默认不会从父元素继承而是设置初始值(initial value),但是有一部分属性,默认 ...

  6. tomcat闪退解决

    异常原因:拷贝了一个tomcat到新机器上,运行startup闪退 解决方法: 1.检查发现当前系统没有安装配置jdk,安装配置后运行仍然闪退 2.在tomcat的启动脚本和关闭脚本中指定JDK和to ...

  7. 初见jQuery EasyUI

    本文通过一个简单的小例子,简述jQuery EasyUI的使用方法,仅供学习分享使用,如有不足之处,还请指正. 什么是jQuery EasyUI ? 引用官网的一句话:jQuery EasyUI fr ...

  8. Android为TV端助力 Intent匹配action,category和data原则

    1.当你在androidmanifest里面定义了一个或多个action时 你使用隐式意图其他activity或者service时,规定你隐式里面的action必须匹配XML中定义的action,可以 ...

  9. c/c++ 数组的智能指针 使用

    数组的智能指针 使用 数组的智能指针的限制: 1,unique_ptr的数组智能指针,没有*和->操作,但支持下标操作[] 2,shared_ptr的数组智能指针,有*和->操作,但不支持 ...

  10. 利用系统函数模拟实现nginx 系统脚本启动的特殊颜色专业效果

    利用系统函数模拟实现nginx 系统脚本启动的特殊颜色专业效果/etc/init.d/nginxd {start/stop/restart/reload}利用if语句实现: ============= ...