目录
System.out.println("------filter-------");//筛选
System.out.println("------limit-------");//获取前几个元素
System.out.println("------skip-------");//跳过前几个元素
System.out.println("------distinct-------");//去重
System.out.println("-----concat---------");//流的合并
System.out.println("------toArray-------");
System.out.println("----------tolist--------")
System.out.println("-----------toMap--------");
前言:
深入了解 Java——Stream 都将为你开启一扇通往新世界的大门。在这篇博客中,我们将一同踏上探索 Stream 的奇妙旅程,挖掘它的潜力,见证它如何重塑我们的 Java 编程体验。
创建单列集合:
ArrayList<String> list = new ArrayList<String>();
list.add("张无忌");
list.add("张三丰");
list.add("张弩");
list.add("小龙女");
list.add("柯镇恶");
list.add("张强");
list.add("赵构");
模糊匹配:
list.stream().filter(name->name.startsWith("张")).filter(name->name.length()==3).forEach(name-> System.out.println(name));
单列集合steam流:
System.out.println("--------单列集合----------");
list.stream().forEach(name-> System.out.print(name+" "));
System.out.println();
双列集合Steam流:
双列集合不能直接调用steam流
创建双列集合:
System.out.println("-------------双列集合----------");
HashMap<String,Integer> map = new HashMap<String,Integer>();
map.put("zhangsan",1);
map.put("lisi",2);
map.put("wangwu",3);
map.put("zhaoliu",4);
双列集合Stream:
map.keySet().stream().forEach(key-> System.out.print(key+"="+map.get(key)+" "));
使用entrySet:
map.entrySet().stream().forEach(s-> System.out.print(s.getValue()+" "));
System.out.println();
System.out.println("-------------数组-------------");
int []arr={1,2,3,4,5};
String []arr1={"a","b","c"};
Arrays.stream(arr).forEach(s-> System.out.print(s+" "));
Arrays.stream(arr1).forEach(s-> System.out.print(s+" "));
System.out.println();
System.out.println("---------零散数据---------")
零散的数据如何获取Stream流?
细节:of方法
1.of方法是一个可变参数,可以传递一堆零散的数据,也可以传递数组
但是数组必须是引用数据类型的,如果是基本数据类型,他会把整个数组当作是一个元素,然后输出的就是地址值
Stream.of(1,5,9,6,33).forEach(s-> System.out.print(s+" "));
Stream.of("a","b","c").forEach(s-> System.out.print(s+" "));
System.out.println();
Stream.of(arr).forEach(s-> System.out.print(s+" "));//基本数据类型,输出的是地址值
System.out.println();
Stream.of(arr1).forEach(s-> System.out.print(s+" "));//引用数据类型,输出的就是他们里面的元素
单列集合Steam流的各种方法:
ArrayList<String> list = new ArrayList<String>();
Collections.addAll(list,"张无忌","张强","张三分","张无忌","周若知","王二麻子","谢广坤");
ArrayList<String> list1=new ArrayList<>();
Collections.addAll(list1,"周若值","snjc");
System.out.println("------filter-------");//筛选
list.stream().filter(s->s.startsWith("张")).forEach(s->System.out.println(s));
System.out.println("------limit-------");//获取前几个元素
list.stream().filter(s->s.startsWith("张")).limit(2).forEach(s->System.out.println(s));
System.out.println("------skip-------");//跳过前几个元素
list.stream().skip(2).forEach(s->System.out.println(s));
System.out.println("------distinct-------");//去重
list.stream().distinct().forEach(s->System.out.println(s));
System.out.println("-----concat---------");//流的合并
Stream.concat(list.stream(), list1.stream()).forEach(s->System.out.println(s));
//将字符串类型转换为数字类型
System.out.println("------map-------");
ArrayList<String> list2=new ArrayList<>();
Collections.addAll(list2,"张无忌-23","张三锋-24");
list2.stream().map(s->Integer.parseInt(s.split("-")[1])).forEach(s->System.out.println(s));
//Integer.parseInt()强转成int
split:切割上面就表示:按照“-”来进行切割那就会切成两部分:张无忌和23,索引分别为0,1
Stream的终结流方法
count
forEach
toArray
collect
输出打印
System.out.println("-------forEach-------");
list.stream().forEach(s-> System.out.println(s));
计算集合Stream中的元素个数
long count = list.stream().skip(2).count();
System.out.println(count);
System.out.println("------toArray-------");
toArray:将流中的数据收集起来,放到一个数组当中
Object[] arr = list.stream().toArray();
System.out.println(Arrays.toString(arr));
toArray方法参数的作用:负责创建一个指定类型的数组
toArray底层:会依次得到流里面的每一个数据,并把数据放到数组中
toArray方法的返回值:是一个装着流里面所有数据的数组
String[] arr1 = list.stream().toArray(s -> new String[s]);
System.out.println(Arrays.toString(arr1));
System.out.println("----------tolist--------")
ArrayList<String> list3=new ArrayList<>();
Collections.addAll(list3,"张无忌-男-15","周若芝-女-17","柯镇恶-男-52","张三-男-23","小龙女-女-26","集美-女-27","谢广坤-男-56");
//对Stream流中的数据进行收集
List<String> newlist = list3.stream().filter(s -> "男".equals(s.split("-")[1])).collect(Collectors.toList());
System.out.println(newlist);
System.out.println("-----------toset--------")
Set<String> newSet = list3.stream().filter(s -> "男".equals(s.split("-")[1])).collect(Collectors.toSet());
System.out.println(newSet);
//注意:tolist和toSet的区别:tolist是可以重复的,toSet是会去重的
System.out.println("-----------toMap--------");
list3.stream().filter(s->"男".equals(s.split("-")[1])).collect(Collectors.toMap(
s->s.split("-")[0],
s->Integer.parseInt(s.split("-")[2])
));
结尾:
这只是 Stream 世界的冰山一角,还有更多高级特性与应用场景等待你去发掘。愿你在后续的 Java 学习与开发中,继续探索,让 Stream 成为你编程路上的得力助手,创造出更多精彩绝伦的应用。