java集合总结6.Stream(不侧重关注)

  • Lamda 表达式;
  • 方法引用,四个函数式接口;
  • 如何使用Stream数据流进行集合的辅助操作, MapReduce 的使用过程;
  • 在JDK1.8开始整个类集里面提供的接口都出现了大量的default 或者是static方法 ,
  • 以 Collection 的父接口Iterable接口里面定义的一个方法来观察;default void forEach(Consumer<? super T> action);
  • 以上一般不会使用.因为forEach()只能够实现输出,但是很多时候我们在进行集合数据输出的同时需要对于数据进行处理.
  • Iterator 输出才是我们主要使用的方式.
  • 除了使用Iterator迭代取出数据并且处理之外,在JDK1.8里面又提供了一个专门可以进行数据处理的接口:Stream 这个接口的对象可以利用Collection 接口提供的方法操作,default Stream<E>stream();
  • stream接口在java.util.stream.Stream下
  • 取得Stream接口对象可以进行数据的加工处理操作,List 无法去除重复
  • 在Stream接口中提供了一个消除重复的方法:public Stream<T> distinct();过滤器
  • 收集器(最后使用收集):public<R , A> R collect(Collector<? super T, A, R> collector)
  • Collector接口在java.util.stream包下 Interface Collector<T,A,R>
  • Collectors 类,在java.lang.Object java.util.stream.Collectors 包下
  • Collectors下有一个toList()方法;public static <T> Collector<T,?,List<T>> toList()  
  • 去除所有重复数据后形成新的集合数据,里面不包含重复内容的集合.
  • List<String> newAll  = stream.distinct().collect(Collectors.toList());
  • Stream接口是数据处理的,支持数据的过滤操作.public Stream<T> filter(Predicate<? super T> predicate);
  • 增加数据的过滤操作,使用断言型函数式接口,使用了String 类中的contains()方法;
  • List<String> newAll  = stream.distinct().filter((x) -> x.conains("a")).collect(Collectors.toList());
  • 以上过滤是区分大小写的,在对数据过滤之前需要对数据进行额外的处理,例如:转大写或小写操作
  • 在Stream接口中提供有专门的数据处理方法. public <R> Stream<R> map(Function<? super T,? extends R> mapper) ;
  • Function 函数式接口接收数据处理并返回 .
  • 数据处理后过滤
  • Stream 接口里面提供有进行集合数据分页的操作,
  • 设置跳过的数据行数: public Stream<T> skip(long n);
  • 设置取出的数据个数:public Stream<T> limit(long maxSize);
  • Stream接口里还提供有数据的全匹配和部分匹配.
  • 全匹配:public boolean allMatch(Predicate<?super T>predicate);
  • 匹配任意一个: public boolean anyMatch(Predicate<? super T> predicate);
  • 可以实现数据的匹配查询
  • 在实际之中需要匹配多个条件,在断言型的函数式接口里面提供了相应的操作方法:
  • 在java.util.function包下,有Predicate断言型的接口提供的方法
  • 或操作:default Predicate<T> or(Predicate<? super T>other);
  • 与操作:default Predicate<T> and(Predicate<? super T>other);
  • 即利用匹配可以针对数据进行方便的查询操作 结合MapReduce一起可以显示出Stream的操作优势.
  • 数据分析方法: public Optional<T> reduce(BinaryOperator<T> accumulator);做数据统计使用的.
  •  想使用更完善的统计操作可以使用Stream接口以下方法:
  • 按照Doouble处理: public DoubleStream mapToDouble(ToDoubleFunction<? super T> mapper)  
  • 按照Int 处理 : public IntStream mapToInt(ToIntFunction<? super T> mapper)  
  • 按照Long处理: public LongStream mapToLong(ToLongFunction<? super T> mapper) ;
  • (Stream 是BaseStream 的子接口,而DoubleStream 也是BaseStream的子接口)
  • BaseStream下有四个子接口:DoubleStream , IntStream , LongStream , Stream <T> 
  • MapReduce: Map处理数据,Reduce分析数据:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java 8引入了java.util.stream.Collectors类,它实现了java.util.stream.Collector接口,并提供了许多方法来对流的元素执行map和reduce操作,或者进行统计操作。 以下是java.util.stream.Collectors类的一些常用方法: 1. toList():将流中的所有元素导出到一个列表中。 ```java import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; public class ToListTest { public static void main(String[] args) { List<String> list = Stream.of("AA", "BB", "CC").collect(Collectors.toList()); list.forEach(s -> System.out.println(s)); } } ``` 2. toSet():将流中的所有元素导出到一个集合中,去除重复元素。 ```java import java.util.Set; import java.util.stream.Collectors; import java.util.stream.Stream; public class ToSetTest { public static void main(String[] args) { Set<String> set = Stream.of("AA", "BB", "CC").collect(Collectors.toSet()); set.forEach(s -> System.out.println(s)); } } ``` 3. toMap():将流中的元素导出到一个Map中,可以指定key和value的映射关系。 ```java import java.util.Map; import java.util.stream.Collectors; import java.util.stream.Stream; public class ToMapTest { public static void main(String[] args) { Map<String, Integer> map = Stream.of("AA", "BB", "CC").collect(Collectors.toMap(s -> s, s -> s.length())); map.forEach((k, v) -> System.out.println(k + ": " + v)); } } ``` 4. joining():将流中的元素连接成一个字符串。 ```java import java.util.stream.Collectors; import java.util.stream.Stream; public class JoiningTest { public static void main(String[] args) { String result = Stream.of("AA", "BB", "CC").collect(Collectors.joining(", ")); System.out.println(result); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值