1. 排序

Stream<T> sorted(); //按元素默认大小排序(必须实现Comparable接口)
Stream<T> sorted(Comparator<? super T> cp); //按指定Comparator比较的结果排序
    public static void main(String[] args){
Stream<String> s = Stream.of("hello","JAVA","python","RUBY","PHP");
s.sorted().forEach(str-> System.out.print(str+"\t"));
System.out.println();
Stream<Integer> s1 = Stream.of(1,9,5,3,7);
s1.sorted(Comparator.reverseOrder()).forEach(str-> System.out.print(str+"\t"));
}


## 2.去除重复元素
Stream distinct(); //返回去除重复元素的Stream
```#java
Stream s = Stream.of("hello","JAVA","hello","RUBY","JAVA");
s.distinct().forEach(str-> System.out.print(str+"\t"));
```

3. 截取

Stream<T> limit(long); //截取Stream前long个元素
Stream<T> skip(long); //跳过Stream前long个元素
        Stream<String> s = Stream.of("hello","JAVA","hello","RUBY","JAVA");
s.limit(3).forEach(str-> System.out.print(str+"\t"));
System.out.println();
Stream<Integer> s1 = Stream.of(1,9,5,3,7);
s1.skip(3).forEach(str-> System.out.print(str+"\t"));

4. concat合并

        Stream<String> s1 = Stream.of("php","JAVA","python");
Stream<String> s2 = Stream.of("android", "ios");
Stream<String> s = Stream.concat(s1,s2);
s.forEach(str-> System.out.print(str+"\t"));


## 5. flatMap把列表的元素取出,构成一个新的Stream
把元素映射为Stream,然后合并成一个新的Stream

        List<String> s1 = new ArrayList<>();
s1.add( "php");
s1.add("JAVA");
s1.add("python");
List<String> s2 = Arrays.asList("android", "ios");
Stream<List> l = Stream.of(s1,s2);
Stream<String> s = l.flatMap(list -> list.stream());
s.forEach(str-> System.out.print(str+"\t"));

6. parallel把一个Stream转换为可以并行处理的Stream

Stream的元素是串行处理的,也就是只能用单线程来处理,如果要提高效率,比如进行并行排序,只需使用parallel()就可以把一个Stream变成一个并行处理的Stream,通过这个方法调用,后续的操作会尽量的并行处理。

        Stream<String> s = Stream.of("php","JAVA","python","android", "ios");
String[] result = s.parallel() //变成一个可以并行处理的Stream
.sorted(). //可以进行并行排序
toArray(String[]::new);
System.out.println(Arrays.toString(result));


## 7. Stream的聚合方法
Optional reduce(BinaryOperater bo)
long count()
T max(Comparator cp)//查找最大元素
T min(Comparator cp) //查找最下元素
针对IntStream, longStream, DoubleStream:
```#java
sum() //求和
average() //求平均值
```
```#java
Integer[] nums = {1,2,3,4,5,6};
long max = Stream.of(nums).max((i1,i2)->i1.compareTo(i2)).get();
long min = Stream.of(nums).min((i1,i2)->i1.compareTo(i2)).get();
System.out.println("最大值:"+max+"\t最小值:"+min);
IntStream ins1 = IntStream.builder().add(1).add(2).add(3).add(4).add(5).add(6).build();
IntStream ins2 = IntStream.builder().add(1).add(2).add(3).add(4).add(5).add(6).build();
Double avg = ins1.average().getAsDouble();
long sum = ins2.sum();
System.out.println("求和:"+sum+"\t平均值:"+avg);
```

## 8. 测试Stream的元素是否满足
boolean allMatch(Predicate) //所有元素均满足测试条件
boolean anyMatch(Predicate) //至少一个元素满足测试条件
```#java
Integer[] nums = {1,2,3,4,5,6};
boolean max = Stream.of(nums).allMatch(x->x>0);
boolean min = Stream.of(nums).anyMatch(x->x>5);
System.out.println("元素全部>0:"+max+"\t存在元素>5:"+min);
```

## 9. forEach循环处理Stream的元素
void forEach(Consumer action)
## 10. 把Stream转换为其他类型
Object[] toArray() //转换为Object数组
A[] toArray(IntFunction) //转换为A[]数组
R collect(Collector Collector) //转换为List/Set等集合类型
```#java
Stream s1 = Stream.of("php","JAVA","python","android", "ios");
String[] arr = s1.toArray(String[]::new);
Stream s2 = Stream.of("php","JAVA","python","android", "ios");
List list = s2.collect(Collectors.toList());
System.out.println(Arrays.toString(arr));
System.out.println(list.toString());
```

## 11. 总结
java.util.stream.Stream题哦那个了许多实用的功能
* 转换操作:map,filter,sorted,distinct
* 合并操作:concat,flatMap
* 并行处理:parallel
* 聚合操作:reduce,count,max,min,sum,average
* 其他操作:allMatch,anyMatch,forEach
参考
[https://blog.csdn.net/qq_28410283/article/details/80783505](https://blog.csdn.net/qq_28410283/article/details/80783505)
[https://www.cnblogs.com/a-du/p/8289537.html](https://www.cnblogs.com/a-du/p/8289537.html)

廖雪峰Java16函数式编程-2Stream-7其他操作的更多相关文章

  1. 廖雪峰Java16函数式编程-1Lambda表达式-1Lambda基础

    1. 函数式编程 Java有2类方法: 实例方法:通过实例调用 静态方法:通过类名调用 Java的方法相当于过程式语言的函数 函数式编程(Functional Programing): 把函数作为基本 ...

  2. 廖雪峰Java16函数式编程-2Stream-6reduce

    1. 聚合方法 Stream.reduce()是一个Stream的聚合方法:把一个Stream的所有元素聚合成一个结果 例如: Stream.of(1, 2, 3, 4, 5).count(); // ...

  3. 廖雪峰Java16函数式编程-2Stream-5filter

    1.filter简介 Stream.filter()是一个转换方法,把一个Stream转换为另一个Stream. 所谓filter操作,就是对一个Stream的所有元素进行测试,不满足条件的元素就被过 ...

  4. 廖雪峰Java16函数式编程-2Stream-4map

    1. map()简介 Stream.map()是一个Stream的转换方法,把一个stream转换为另一个Stream,这2个Stream是按照映射函数一一对应的. 所谓map操作,就是把一种操作运算 ...

  5. 廖雪峰Java16函数式编程-2Stream-2创建Stream

    1. 方法1:把一个现有的序列变为Stream,它的元素是固定的 //1.直接通过Stream.of()静态方法传入可变参数进行创建 Stream<Integer> s = Stream. ...

  6. 廖雪峰Java16函数式编程-2Stream-1Stream简介

    1. Stream Java8引入全新的Stream API 位于java.util.stream包 1.1 Stream API不同于java.io的InputStream/OutputStream ...

  7. 廖雪峰Java16函数式编程-1Lambda表达式-3方法引用

    Java8引入了Lambda表达式,可以不必编写FunctionalInterface的实现类,直接写Lambda表达式.除了Lambda表达式,我们还可以直接传入方法引用 方法引用是指:如果某个方法 ...

  8. [python学习篇][廖雪峰][2]函数式编程

    函数名也是变量: >>> f = abs >>> f(-10) 10 然变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就 ...

  9. 廖雪峰Java6 IO编程-2input和output-5操作zip

    1.ZipInputStream是一种FilterInputStream 可以直接读取zip的内容 InputStream->FilterInputStream->InflateInput ...

随机推荐

  1. 关于py中lxml模块的cssselect的小问题

    今天在使用lxml进行解析页面的时候遇到了不能解析空格的问题,就是类似于: <div class="aa bb"></div> 使用cssselect('. ...

  2. pytest----fixture(1)--使用fixture执行配置及销毁逻辑

    1使用fixture执行配 置及销毁;非常灵活 使用. 2数据共享:在 conftest.py配置里写方 法可以实现数据共享, 不需要import导入.可 以跨文件共享 3scope的层次及神 奇的y ...

  3. 试探回溯法(backtracking)

    一.八皇后问题 国际象棋中皇后的势力范围覆盖其所在的水平线.垂直线以及两条对角线.现考查如下问题:在n*n的棋盘上放置n个皇后,如何使得她们彼此互不攻击,此时称她们构成一个可行的棋局.对于任何整数n ...

  4. python_django_中间件

    什么是中间件? 可以介入django的请求和响应的轻量级的底层插件,它其实就是一个python类,我们在settings配置文件中的↓↓↓↓,都是中间件 MIDDLEWARE = [ 'django. ...

  5. leetcode-158周赛-5224-掷筛子模拟

    题目描述: 方法:动态规划O(6∗6∗n∗15) 递归: from functools import lru_cache class Solution: def dieSimulator(self, ...

  6. java系列(1/4)基础阶段-MySQL(2/13)

    本单元目标 一.为什么要学习数据库 二.数据库的相关概念 DBMS.DB.SQL 三.数据库存储数据的特点 四.初始MySQL MySQL产品的介绍 MySQL产品的安装 ★ MySQL服务的启动和停 ...

  7. LeetCode 445. Add Two Numbers II (两数相加 II)

    题目标签:Linked List 题目给了我们两个 数字的linked list,让我们把它们相加,返回一个新的linked list. 因为题目要求不能 reverse,可以把 两个list 的数字 ...

  8. Qt无边框窗口的移动、拉伸边框、鼠标滚轮缩放大小

    主要是处理窗口上鼠标的几个事件,具体代码请看下面的截图, 完整代码的下载链接在此:http://download.csdn.net/detail/beyond0824/9657110, 本示例代码中, ...

  9. kubernetes session and 容器root权限

    session保持 如何在service内部实现session保持呢?当然是在service的yaml里进行设置啦. 在service的yaml的sepc里加入以下代码: sessionAffinit ...

  10. java.lang.NoSuchMethodError: com.google.common.hash.HashFunction.hashInt(I)Lcom/google/common/hash/HashCode; 解决办法

    今天在java 上运行spark查询的时候出现一个问题: java.lang.NoSuchMethodError: com.google.common.hash.HashFunction.hashIn ...