Java核心编程总结(七、Stream流)

  1. Stream流能解决什么问题?

答:可以解决已有集合类库或者数据API的弊端,Stream流认为集合和数组操作的API很不好用,所以采用了Stream流简化集合和数据的操作

[](()1.2Stream流的获取


Stream流式思想的核心:

  • 是先得到集合或者数组的Stream流(就是一根传送带)

  • 然后就用这个Stream流操作集合或者数组的元素

  • 然后用Stream流简化替代集合操作的API

集合获取流的API:

  • default Stream<E> stream()

  • 集合获取Stream流用stream()

public class StreamDemo01 {

public static void main(String[] args) {

/** --------------------Collection集合获取流------------------------------- */

// Collection集合如何获取Stream流。

Collection c = new ArrayList<>();

Stream ss = c.stream();

/** --------------------Map集合获取流------------------------------- */

Map<String, Integer> map = new HashMap<>();

// 先获取键的Stream流。

Stream keyss = map.keySet().stream();

// 在获取值的Stream流

Stream valuess = map.values().stream();

// 获取键值对的Stream流(key=value: Map.Entry<String,Integer>)

Stream<Map.Entry<String,Integer>> keyAndValues = map.entrySet().stream();

/** ---------------------数组获取流------------------------------ */

// 数组也有Stream流。

String[] arrs = new String[]{“Java”, “JavaEE” ,“Spring Boot”};

Stream arrsSS1 = Arrays.stream(arrs);

Stream arrsSS2 = Stream.of(arrs);

}

}

[](()1.3Stream流API


| forEach | count | filter | limit | skip | map | concat |

| — | — | — | — | — | — | — |

| 逐一处理(遍历) | 统计个数 | 过滤元素 | 取前几个元素 | 跳过前几个 | 加工方法 | 合并流 |

  • map: 把原来的元素加工以后,重新放上去

public class StreamDemo01 {

public static void main(String[] args) {

List list = new ArrayList<>();

list.add(“张无忌”);

list.add(“周芷若”);

list.add(“赵敏”);

list.add(“张强”);

list.add(“张三丰”);

list.add(“张三丰”);

// 遍历出长度为3并且姓张的人

list.stream().filter( s -> s.length() == 3 ).filter( s -> s.startsWith(“张”))

.forEach( System.out::println);

// 统计数量

long count = list.stream().filter( s -> s.length() == 3 )

.filter( s -> s.startsWith(“张”)).count();

System.out.println(count);

// 取前2个

list.stream().filter(s -> s.length() == 3).limit(2)

.forEach( System.out::println);

// 跳过前2个

list.stream().filter(s -> s.length() == 3).skip(2)

.forEach( System.out::println);

}

}

[](()1.4终结与非终结方法


  • 终结方法:一旦Stream调用了终结方法,流的操作就全部终结了,不能继续使用了,只能创建新的Stream操作

  • 终结方法:foreach count

  • 非终结方法:每次调用完成以后返回一个新的流对象,可以继续使用,支持链式编程

public class StreamDemo {

public static void main(String[] args) {

List list = new ArrayList<>();

list.add(“张无忌”);

list.add(“周芷若”);

list.add(“赵敏”);

list.add(“张强”);

list.add(“张三丰”);

list.add(“张三丰”);

// foreach终结方法

list.stream().filter(s -> s.startsWith(“张”))

.filter(s -> s.length() == 3).forEach(System.out::println);

long count = list.stream().filter(s -> s.startsWith(“张”))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值