Stram流技术
Stream流常用中间操作方法(执行完此方法后Stream仍然可以继续执行其他操作)
- Stream filter 对流中的数据进行过滤
- Stream limit 截取指定参数的个数
- Stream skip 跳过指定参数个数的数据,返回剩余元素组成的流
- Stream.concat(Stream a,Stream b)合并a,b两个流
- Stream distinct 返回由该流组成的不同元素
- Stream sorted 将流进行自然排序
- Stream map 返回由给定函数应用于此流的元素组成的流
- IntStream mapToInt 返回一个IntStream其中包含将给定函数应用于此流的元素的结果
Stream流常用终结操作方法(执行完此方法后Stream将不能再执行其他操作)
- void forEach 遍历
- long count() 返回此流中的元素数
Stream流常用收集操作方法(执行完此方法将Stream中的数据收集到集合中)
-
collect(Collector collector) 把结果收集到集合中
- Collector toList() 把结果收集到List集合中
- Collector toSet() 把结果收集到Set集合中
- Collector toMap(key,value) 把结果收集到Map集合中
IntStream
//建立IntStream流
IntStream is = IntStream.empty();
System.out.println(is.count());//0
//Java8新技术
int sum = IntStream.rangeClosed(0, 100).sum();//100个数相加
System.out.println(sum);//5050
IntStream is1 = IntStream.generate(() -> 3).limit(5);//生成五个数
is1.forEach(System.out::println);//33333
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(3);
list.add(2);
list.stream().forEach(System.out::println);//List<Integer> 转换为 IntStream
IntStream ii = list.stream().mapToInt(e -> e);//IntStream 转换为 List<Integer>
// List<Integer> lis = ii.boxed().collect(Collectors.toList());//IntStream 转换为 List<Integer>
OptionalInt max = ii.max();//求最大值
System.out.println(max.getAsInt());//3
Stream
package demo1;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Stream;
/**
* @author sulishijian
* @date 2021/8/23-21:34
* @since 16
*/
public class Stream4 {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("张三");
list.add("李四");
list.add("王五");
list.add("赵六");
list.add("李强");
list.sort(String::compareTo);
System.out.println(list);
Stream<String> stream = list.stream();
//filter 过滤操作保留只剩李的名字
//Stream<String> flt = stream.filter(a -> a.startsWith("李"));
//flt.forEach(System.out::println);//李四 李强
//limit 限制操作取前三个
//Stream<String> limit = stream.limit(3);
//limit.forEach(System.out::println);//张三 李四 王五
//skip 跳过前两个
// Stream<String> skip = stream.skip(2);
// skip.forEach(System.out::println);//王五 赵六 李强
//distinct 去除重复元素
//list.add("张三");
//Stream<String> distinct = list.stream().distinct();
//distinct.forEach(System.out::println);//张三 李四 王五 赵六 李强
//sorted 进行排序默认自然排序
// stream.sorted().forEach(System.out::println);//自然升序
//stream.sorted(Comparator.reverseOrder()).forEach(System.out::println);//降序
//map 返回由给定函数应用于此流的元素的结果组成的流
//stream.map(s -> String.format("\"%s\"", s)).forEach(System.out::println);//"张三""李四""李强""王五""赵六"
//count 统计以李开头的元素
long li = stream.filter(s -> s.startsWith("李")).count();
System.out.println(li);//2
}
}
package demo1;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* @author sulishijian
* @date 2021/8/24-10:26
* @since 16
*/
public class Stream5 {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("张三");
list.add("李四");
list.add("王五");
list.add("赵六");
list.add("李强");
Stream<String> stream = list.stream();
//Stream流收集List集合
//List<String> name = stream.collect(Collectors.toList());
//System.out.println(name);//[张三, 李四, 王五, 赵六, 李强]
//转换为Set集合
Set<String> set = stream.collect(Collectors.toSet());
System.out.println(set);//[李强, 李四, 张三, 王五, 赵六]
//转换Map集合
List<Student4> list1 = new ArrayList<>();
list1.add(new Student4(1, "林心如", 80));
list1.add(new Student4(2, "张曼玉", 40));
list1.add(new Student4(3, "郭富城", 20));
list1.add(new Student4(4, "林青霞", 50));
list1.add(new Student4(5, "林青霞", 70));
Stream<Student4> stream1 = list1.stream();
Map<String, Student4> collect1 = stream1.collect(Collectors.toMap(e -> "stu_" + e.getId(), e -> e));
System.out.println(collect1);//{stu_5=Student4(id=5, name=林青霞, age=70), stu_4=Student4(id=4, name=林青霞, age=50), stu_3=Student4(id=3, name=郭富城, age=20), stu_2=Student4(id=2, name=张曼玉, age=40), stu_1=Student4(id=1, name=林心如, age=80)}
}
}
@Data//lombok包可以自动生产get set
class Student4 {
private int id;
private String name;
private int age;
public Student4(int id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
}