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中的流操作-基本使用&amp;性能测试

    为获得更好的阅读体验,请访问原文:传送门 一.流(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. Node学习笔记(一):stream流操作

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

  9. [WCF编程]10.操作:流操作

    一.流操作概述 在默认情况下,当客户端调用服务时,服务只有在接收到完整的消息后才会被调用,同样,客户端只有在包含了调用结果的返回消息被完整接受时,才会解除对它的阻塞. 对于数据量小的消息,这种交换模式 ...

随机推荐

  1. 小菜学习Winform(六)剪切板和拖放复制

    前言 在做winform项目的时候有时候会用到复制粘贴,在.net中提供了Clipboard类来操作剪切板,我们来看下. clipbrd.exe clipbrd是系统剪切板程序,但是在vista及以上 ...

  2. Tensorflow学习笔记2:About Session, Graph, Operation and Tensor

    简介 上一篇笔记:Tensorflow学习笔记1:Get Started 我们谈到Tensorflow是基于图(Graph)的计算系统.而图的节点则是由操作(Operation)来构成的,而图的各个节 ...

  3. Struts2的基本流程的详细介绍

    Struts2基本流程 概述: Struts2框架由三部分构成:核心控制器.业务控制器和用户实现的业务逻辑组件.在这三部分中,struts2框架提供了核心控制器StrutsPrepareAndExec ...

  4. popToViewController用法

    [self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIn ...

  5. Unicode、UTF-8 和 ISO8859-1到底有什么区别

    说明:本文转载于新浪博客,旨在方便知识总结.原文地址:http://blog.sina.com.cn/s/blog_673c81990100t1lc.html 本文主要包括以下几个方面:编码基本知识, ...

  6. elasticsearch2.3.3集群搭建踩到的坑

    本文来自我的github pages博客http://galengao.github.io/ 即www.gaohuirong.cn 摘要: 作者原来搭建的环境是0.95版本 现在升级到2.3.3版本, ...

  7. SQL反模式学习笔记6 支持可变属性【实体-属性-值】

    目标:支持可变属性 反模式:使用泛型属性表.这种设计成为实体-属性-值(EAV),也可叫做开放架构.名-值对. 优点:通过增加一张额外的表,可以有以下好处 (1)表中的列很少: (2)新增属性时,不需 ...

  8. python3 第三十三章 - 标准库概览Part II

    第二部分提供了更高级的模块用来支持专业编程的需要.这些模块很少出现在小型的脚本里. 1. 输出格式化reprlib 模块提供了一个用来缩写显示大型或深层嵌套容器的 定制版repr() . >&g ...

  9. 执行效率做比较,Go、python、java、c#、delphi、易语言等

    比较环境,在win7   64位,比较各种语言的整数型运算,下面的比较只作为单项比较.具体方式,40000*40000遍历相加.为了防止编译器优化,生成一个随机数. 1:c#,在NET2.0框架下作为 ...

  10. Java中的内部类————以及jdk1.8的lambda表达式

    一.内部类学习导图 1>.静态内部类: 使用static修饰符来修饰内部类,则这个内部类就属于外部类本身,而不属于外部类的某个对象.因此使用static修饰的内部类被称为静态内部类. publi ...