Java Stream总结

简介

Stream是 Java 8新增加的类,用来补充集合类。

Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Java 集合运算和表达的高阶抽象。

Stream将要处理的元素集合看作一种流, 流在管道中传输, 并且可以在管道的节点上进行处理, 比如筛选, 排序,聚合等。

元素流在管道中经过中间操作(intermediate operation)的处理,最后由最终操作(terminal operation)得到前面处理的结果。

Stream(流)是一个来自数据源的元素队列并支持聚合操作

  • 数据源 流的来源。 可以是集合,数组,I/O channel, 产生器generator 等。
  • 聚合操作 类似SQL语句一样的操作, 比如filter, map, reduce, find, match, sorted等。

map

map 方法用于映射每个元素到对应的结果,下面代码转换大小写。

List<String> output = wordList.stream().map(String::toUpperCase).collect(Collectors.toList());

 

与flatmap对比 

flatmap

将多个Stream连接成一个Stream,这时候不是用新值取代Stream的值,与map有所区别,这是重新生成一个Stream对象。

List<String> words = new ArrayList<String>();
words.add("hello");
words.add("world");


public static Stream<Character> characterStream(String s){  
    List<Character> result = new ArrayList<>();  
    for (char c : s.toCharArray()) 
        result.add(c);
    return result.stream();  
}
  
Stream<Stream<Character>> result = words.map(w -> characterStream(w));  
  
Stream<Character> letters = words.flatMap(w -> characterStream(w));  

如果使用的是map方法,返回的是[ ['h', 'e', 'l', 'l','o'], ['w', 'o', 'r', 'l','d']

如果使用的是flatMap方法,返回的是['h', 'e', 'l', 'l','o','w', 'o', 'r', 'l','d']

filter

filter 方法用于通过设置的条件过滤出元素。

Integer[] sixNums = {1, 2, 3, 4, 5, 6};

//只留偶数

Integer[] evens = Stream.of(sixNums).filter(n -> n%2 == 0).toArray(Integer[]::new);

 

Collectors

Collectors 类实现了很多归约操作,例如将流转换成集合和聚合元素。

List<String>strings = Arrays.asList("you", "are", "stupid", "ha", "ha","", "a"); 

List<String> filtered = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.toList()); 

System.out.println("筛选列表: " + filtered); 

String mergedString = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.joining(", "));

System.out.println("合并字符串: " + mergedString);

 

forEach和limit

Stream 提供了新的方法 'forEach' 来迭代流中的每个数据。

Random random = new Random();
// 随机输出10个整数
random.ints().limit(10).forEach(System.out::println);

sorted

sorted 方法用于对流进行排序。

Random random = new Random();
// 对10个随机数进行排序输出
random.ints().limit(10).sorted().forEach(System.out::println);

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值