java的Strem流和Lambda写法
侧边栏壁纸
  • 累计撰写 61 篇文章
  • 累计收到 18 条评论

java的Strem流和Lambda写法

龙流
2022-07-14 / 0 评论 / 78 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2022年08月04日,已超过602天没有更新,若内容或图片失效,请留言反馈。

1、首先知道哪些方式可以生成Stream流

  • Collection体系集合,使用默认的straem()生成流;(eg: ArrayList->method:Stream stream())
  • Map体系集合,把Map转成Set集合,间接的生成流; (Map->method:Set keySet())
  • 数组,通过Stream接口的静态方法Stream.of(T... values)生成流

2、Stream流中间操作方法

方法名说明
Stream filter(Predicate predicate)用于对流中的数据进行过滤
Stream limit(long maxSize)返回此流中的元素组成的流,截取前指定参数个数的数据
Stream skip(long n)跳过指定参数个数的数据,返回由该流的剩余元素组成的流
static Stream concat(Stream a, Stream b)合并a和b两个流为一个流
Stream distinct()返回由该流的不同元素(根据Object.equals(Object) )组成的流
Stream sorted()返回由此流的元素组成的流,根据自然顺序排序
Stream sorted(Comparator comparator)返回由该流的元素组成的流,根据提供的Comparator进行排序
Stream map(Function mapper)返回由给定函数应用于此流的元素的结果组成的流
IntStream mapToInt(ToIntFunction mapper)返回一个IntStream其中包含将给定函数应用于此流的元素的结果

3、Stream流的收集操作【应用】

  • 概念
    对数据使用Stream流的方式操作完毕后,可以把流中的数据收集到集合中。
  • 常用方法
    R collect(Collector collector) 把结果收集到集合中
  • 工具类Collectors提供了具体的收集方式

    方法名说明
    public static Collector toList()把元素收集到List集合中
    public static Collector toSet()把元素收集到Set集合中
    public static Collector toMap(Function keyMapper,Function valueMapper)把元素收集到Map集合中
  • 代码实例
public class CollectDemo {
  public static void main(String[] args) {
    //创建List集合对象
    List<String> list = new ArrayList<String>();
    list.add("林青霞");
    list.add("张曼玉");
    list.add("王祖贤");
    list.add("柳岩");
    /*
    //需求1:得到名字为3个字的流
    Stream<String> listStream = list.stream().filter(s -> s.length() == 3);
    //需求2:把使用Stream流操作完毕的数据收集到List集合中并遍历
    List<String> names = listStream.collect(Collectors.toList());
    for(String name : names) {
    System.out.println(name);
    }
    */
    //创建Set集合对象
    Set<Integer> set = new HashSet<Integer>();
    set.add(10);
    set.add(20);
    set.add(30);
    set.add(33);
    set.add(35);
    /*
    //需求3:得到年龄大于25的流
    Stream<Integer> setStream = set.stream().filter(age -> age > 25);
    //需求4:把使用Stream流操作完毕的数据收集到Set集合中并遍历
    Set<Integer> ages = setStream.collect(Collectors.toSet());
    for(Integer age : ages) {
    System.out.println(age);
    }
    */
    //定义一个字符串数组,每一个字符串数据由姓名数据和年龄数据组合而成
    String[] strArray = {"林青霞,30", "张曼玉,35", "王祖贤,33", "柳岩,25"};
    //需求5:得到字符串中年龄数据大于28的流
    Stream<String> arrayStream = Stream.of(strArray).filter(s ->
    Integer.parseInt(s.split(",")[1]) > 28);
    //需求6:把使用Stream流操作完毕的数据收集到Map集合中并遍历,字符串中的姓名作键,年龄作值
    Map<String, Integer> map = arrayStream.collect(Collectors.toMap(s ->
    s.split(",")[0], s -> Integer.parseInt(s.split(",")[1])));
    Set<String> keySet = map.keySet();
    for (String key : keySet) {
    Integer value = map.get(key);
    System.out.println(key + "," + value);
    }
  }
}
0

评论 (0)

取消