java小白零基础(十二)Stream流

1.Stream流

(基于Lambda之后,jdk8又引入一个关于集合类库目前的弊端的解决方案。叫stream流)

入门案例

将list集合 姓张的过滤到另外一个新的集合中

    public static void main(String[] args) {//将list集合  姓张的过滤到另外一个新的集合中//然后再将新集合中的名字的长度为3的存到新的集合中List<String> list = new ArrayList<>();list.add("老邢");list.add("张得帅");list.add("张飞");list.add("张开放");list.add("蔡徐坤");List<String> list1 = new ArrayList<>();for (String s : list) {if (s.startsWith("张")) {list1.add(s);}}System.out.println(list1);List<String> list2 = new ArrayList<>();for (String s : list1) {if(s.length() == 3) {list2.add(s);}}System.out.println(list2);}
}
list.stream(). 把一个集合变成Streamfilter((name)->name.startsWith("张")). 过滤 姓张
filter((name)->name.length() == 3).过滤长度为3forEach((name)-> System.out.println(name));  遍历

1.1获取Stream对象

根据集合获取流对象:

Collection集合:default Stream stream(); 返回的是一个有顺序的 和集合源数据相关的对象,说白了 就是将集合中的数据变成了另外一种形式而已 (流的形式)

1.11根据list集合获取流对象
ArrayList<String> strings = new ArrayList<>();strings.add("狗蛋");strings.add("老邢");strings.add("二贝");System.out.println(strings);//可以list集合变成一个流对象Stream<String> stream = strings.stream();System.out.println(stream);//内存地址
1.12Stream流对象下 面的方法

方法就是一个功能

方法的名字方法的作用方法种类是否支持链式操作
count统计个数终结方法
forEach遍历数据的终结方法
filter过滤数据可以拼接
limit取前几个数据可以拼接
skip跳过前几个可以拼接
map映射方法可以拼接
concat拼接可以拼接
1.2.1count和forEach

count :统计流中的个数,返回值是long类型的数据

forEach: 遍历流中数据的

public static void main(String[] args) {ArrayList<String> strings = new ArrayList<>();strings.add("刘亦菲");strings.add("蔡徐坤");strings.add("成龙");Stream<String> stream = strings.stream();long count = stream.count();System.out.println(count);//链式操作long count1 = strings.stream().count();System.out.println(count1);//froEach//对此流的每个元素执行操作strings.stream().forEach(new Consumer<String>() {@Override//将流中的数据 赋值 spublic void accept(String s) {System.out.println(s);}});strings.stream().forEach((s)-> System.out.println(s));}
}
1.2.2filter方法

返回由与此给定谓词匹配的此流的元素组成的流。

Stream<T> filter(Predicate<? super T> predicate)public static void main(String[] args) {ArrayList<String> strings = new ArrayList<>();strings.add("刘亦菲");strings.add("蔡徐坤");strings.add("成龙");strings.add("杨坤");strings.add("陈坤");strings.stream().filter(new Predicate<String>() {@Overridepublic boolean test(String s) {//s流中字符串每个的数据boolean b = s.endsWith("坤");return b;}}).filter(new Predicate<String>() {@Overridepublic boolean test(String s) {boolean c = s.startsWith("陈");return c;}}).forEach(new Consumer<String>() {@Overridepublic void accept(String s) {System.out.println(s);}});strings.stream().filter((goudan)->goudan.endsWith("坤")).filter((s)->s.startsWith("陈")).forEach((s)-> System.out.println(s));}
}
1.2.3limit方法

限制输出

import java.util.ArrayList;
import java.util.stream.Stream;/*** description:* 公司:千锋教育* author:博哥* 公众号:Java架构栈*/
public class Demo5 {public static void main(String[] args) {ArrayList<String> strings = new ArrayList<>();strings.add("刘亦菲");strings.add("蔡徐坤");strings.add("成龙");strings.add("杨坤");strings.add("陈坤");strings.add("战三坤");strings.add("损五坤");strings.add("爱坤");//limit 是要前几个数据 根据参数不同strings.stream().limit(5).forEach((s)-> System.out.println(s));strings.stream().limit(5).filter((s)->s.endsWith("坤")).forEach((s)-> System.out.println(s));}
}
1.2.4map方法

处理映射关系的

  public static void main(String[] args) {ArrayList<String> strings = new ArrayList<>();strings.add("12");strings.add("13");strings.add("14");strings.add("15");//将字符串数字 转为int类型的数据
//        for (String string : strings) {
//
//            int i = Integer.parseInt(string);
//            System.out.println(i);
//        }strings.stream().map(new Function<String, Integer>() {@Overridepublic Integer apply(String s) {int i = Integer.parseInt(s);return i;}}).forEach((Integer s)-> System.out.println(s));strings.stream().map((s)->Integer.parseInt(s)).forEach((s)-> System.out.println(s));}
}
1.2.5skip方法

跳过前几个值

   public static void main(String[] args) {ArrayList<String> strings = new ArrayList<>();strings.add("12");strings.add("13");strings.add("14");strings.add("15");strings.stream().skip(2).forEach((s)-> System.out.println(s));}
}
1.2.6concat合并两个流
    ArrayList<String> list1 = new ArrayList<>();list1.add("12");list1.add("13");list1.add("14");list1.add("15");ArrayList<String> strings = new ArrayList<>();strings.add("刘亦菲");strings.add("蔡徐坤");strings.add("成龙");strings.add("杨坤");Stream<String> stream = list1.stream();Stream<String> stream1 = strings.stream();//将两个流合并Stream<String> concat = Stream.concat(stream, stream1);concat.forEach((s)-> System.out.println(s));}
}
1.2收集流

stream.collect(Collectors.toList())

stream.collect(Collectors.toSet())

toList(); 将流转为List集合

toSet(); 将流转为Set集合

因为真实的开发的时候,最终的结果还是集合 流只是扮演了中间处理数据的角色

  public static void main(String[] args) {ArrayList<String> strings = new ArrayList<>();strings.add("刘亦菲");strings.add("蔡徐坤");strings.add("成龙");strings.add("杨坤");strings.add("陈坤");strings.add("战三坤");strings.add("损五坤");strings.add("爱坤");strings.add("爱坤");//collect  收集的方法//stream.collect(Collectors.toList()) 以什么样的方式收集List<String> list = strings.stream().filter((s) -> s.endsWith("坤")).skip(2).collect(Collectors.toList());System.out.println(list);Set<String> set = strings.stream().filter((s) -> s.endsWith("坤")).skip(2).collect(Collectors.toSet());System.out.println(set);}
}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部