Java中的Stream流
Stream流
初识Stream流
体验Stream;流的作用
需求:按照下面的要求完成集合的创建和遍历创建一个集合,存储多个字符串元素
ArrayList<String> list = new ArrayList<>();
list.add("张无忌");
list.add("周芷若");
list.add("赵敏");
list.add("张强");
list.add("张三丰");
要求:
- 把所有以“张”开头的元素存储到新集合中
- 把“张”开头的,长度为3的元素再存储到新集合中
- 遍历打印最终结果
package com.example.demo;
import java.util.ArrayList;
public class Text {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("张无忌");
list.add("周芷若");
list.add("赵敏");
list.add("张强");
list.add("张三丰");
// 1.把所有以“张”开头的元素存储到新集合中
ArrayList<String> list1 = new ArrayList<>();
for (String name : list) {
if(name.startsWith("张")){
list1.add(name);
}
}
// 2.把“张”开头的,长度为3的元素再存储到新集合中
ArrayList<String> list2 = new ArrayList<>();
for (String name : list1) {
if(name.length() == 3){
list2.add(name);
}
}
// 3.遍历打印最终结果
System.out.println(list2);
}
}
package com.example.demo;
import java.util.ArrayList;
public class Text {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
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));
}
}
Stream流的作用
结合Lambda表达式,简化集合、数组的操作
Stream流的使用步骤
①先得到一条Stream流(流水线),并把数据放上去
package com.example.demo;
import java.util.ArrayList;
import java.util.Collections;
public class Text {
public static void main(String[] args) {
//单列集合
ArrayList<String> list = new ArrayList<>();
Collections.addAll(list,"a","b","c","d","e");
list.stream().forEach(s-> System.out.println(s));
}
}
package com.example.demo;
import java.util.HashMap;
public class StreamDemo2 {
public static void main(String[] args) {
// 1.创建双列集合
HashMap<String,Integer> hm = new HashMap<>();
// 2.添加数据
hm.put("a",1);
hm.put("b",2);
hm.put("c",3);
hm.put("d",4);
// 3.第一种获取获取Stream流的方法
// hm.keySet().stream().forEach(s-> System.out.println(s));
// 4.第二种获取Stream流的方法
hm.entrySet().stream().forEach(s-> System.out.println(s));
}
}
package com.example.demo;
import java.util.Arrays;
public class StreamDemo3 {
public static void main(String[] args) {
// 1.创建数组
int[] arr = {1,2,3,4,5,6,7,8,9,10};
// 2.获取Stream流,引用数据类型同样适用
Arrays.stream(arr).forEach(s-> System.out.println(s));
}
}
package com.example.demo;
import java.util.stream.Stream;
public class StreamDemo4 {
public static void main(String[] args) {
//一对零散的数据
Stream.of(1,2,3,4,5).forEach(s-> System.out.println(s));
Stream.of("a","b","c").forEach(s -> System.out.println(s));
//Stream接口中静态方法of的细节
//方法的形参是一个可变参数,可以传递一堆零散的数据,也可以传递数组
//但数组必须是引用数据类型的,如果传递基本数据类型,是会把整个数组当做一个元素,放到Stream当中
}
}
②利用Stream流中的API进行各种操作
1.过滤 转换 中间方法:方法调用完毕之后,还可以调用其他方法
package com.example.demo;
import java.util.ArrayList;
import java.util.Collections;
public class StreamDemo5 {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
Collections.addAll(list,"张无忌","周芷若","赵敏","张三丰");
list.stream().filter(s-> s.startsWith("张"))
.filter(s->s.length() == 3)
.forEach(s-> System.out.println(s));
list.stream().limit(3).forEach(s-> System.out.println(s));
list.stream().skip(4).forEach(s-> System.out.println(s));
}
}
package com.example.demo;
import java.util.ArrayList;
import java.util.Collections;
public class StreamDemo6 {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
Collections.addAll(list,"张无忌","张无忌","张无忌","周芷若","赵敏","张三丰");
list.stream().distinct().forEach(s-> System.out.println(s));
}
}
package com.example.demo;
import java.util.ArrayList;
import java.util.Collections;
import java.util.function.Function;
public class StreamDemo7 {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
Collections.addAll(list,"张无忌-15","张无忌-15","张无忌-15","周芷若-16","赵敏-17","张三丰-17");
// 需求:只获取里面的年龄并进行打印
// 第一个类型:流中原来的数据类型
// 第二个类型:要转成之后的数据类型
// apply的形参s:依次表示流里面的每一个数据
// 返回值:表示转换之后的数据
// 当map方法执行完毕之后,流上的数据就变成整数了
// 所以forEach方法里的s依次表示流里面的每一个数据,这个数据现在是整数
list.stream().map(new Function<String, Integer>() {
public Integer apply(String s){
String[] arr = s.split("-");
String ageString = arr[1];
int age = Integer.parseInt(ageString);
return age;
}
}).forEach(s-> System.out.println(s));
list.stream().map(s->Integer.parseInt(s.split("-")[1])).forEach(s-> System.out.println(s));
}
}
注意1:中间方法,返回新的Stream流,原来的Stream流只能使用一次,建议使用链式编程。
注意2:修改Stream流中的数据,不会影响原来集合或者数组中的数据。
2.统计 打印 终结方法:最后一步,调用完毕之后,不能调用其他方法
package com.example.demo;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.function.Consumer;
import java.util.function.IntFunction;
public class StreamDemo8 {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
Collections.addAll(list, "张无忌", "张无忌", "张无忌", "周芷若", "赵敏", "张三丰", "张强");
//Consumer的泛型:表示流里面的数据
//accept方法的形参s:依次表示流里面的每一个数据
// 方法体:对每一个数据的处理操作(打印)
/*list.stream().forEach(new Consumer<String>() {
@Override
public void accept(String s) {
System.out.println(s);
}
});*/
// list.stream().forEach(s-> System.out.println(s));
// long count = list.stream().count();
// System.out.println(count);
// Object[] arr = list.stream().toArray();
// System.out.println(Arrays.toString(arr));
//IntFunction的泛型:具体数组的类型
//apply的形参:流中数据的个数,要跟数组的长度保持一致
//apply返回值:具体类型的数组
//方法体:就是创建数组
//toArray方法的参数的作用:负责创建一个指定类型的数组
//toArray方法的底层,会依次得到流里面的每一个数据,并把数据放到数组当中
//toArray方法的返回值:是一个装着流里面所有数据的数组
// String[] arr = list.stream().toArray(new IntFunction<String[]>() {
// @Override
// public String[] apply(int value) {
// return new String[value];
// }
// });
//
// System.out.println(Arrays.toString(arr));
String[] arr2 = list.stream().toArray(value -> new String[value]);
System.out.println(Arrays.toString(arr2));
}
}
原文地址:https://blog.csdn.net/m0_71513446/article/details/140434509
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!