package cn.com.css.xtbg;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@EqualsAndHashCode
@NoArgsConstructor
public class Employee {
private Integer id;
private String name;
private Integer age;
private Double salary;
}
import org.apache.xmlbeans.impl.regex.Match;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.function.UnaryOperator;
import java.util.stream.Stream;
public class Test {
/*
Stream API
*/
public static void main(String[] args) {
createStream();
}
/*
创建Stream流
*/
private static void createStream(){
// 1.集合创建
ArrayList<String> list = new ArrayList<>();
Stream<String> stream1 = list.stream();
// 2.数组
Integer[] integers = new Integer[10];
Stream<Integer> stream2 = Arrays.stream(integers);
// 3.Stream的静态方法
Stream<Integer> stream3 = Stream.of(1, 2, 3, 4, 5);
//4.无限流
Stream<Integer> stream4 = Stream.iterate(0, (x) -> x + 2).limit(10);
System.out.println("4.无限流");
stream4.forEach(System.out::println);
//5.生成2个随机数
Stream<Double> stream5 = Stream.generate(Math::random).limit(2);
System.out.println("生成2个随机数");
stream5.forEach(System.out::println);
}
/*
中间操作
筛选与切片:
filter——接收 Lambda , 从流中排除某些元素。
limit——截断流,使其元素不超过给定数量。
skip(n) —— 跳过元素,返回一个扔掉了前 n 个元素的流。若流中元素不足 n 个,则返回一个空流。与 limit(n) 互补
distinct——筛选,通过流所生成元素的 hashCode() 和 equals() 去除重复元素
*/
private static void operate(){
ArrayList<Employee> employees = new ArrayList<>();
employees.add(new Employee(1,"zhangsan1",30,5000.20));
employees.add(new Employee(2,"zhangsan2",35,5000.20));
employees.add(new Employee(3,"zhangsan3",30,5000.20));
employees.add(new Employee(4,"zhangsan4",35,5000.20));
employees.add(new Employee(5,"zhangsan5",30,5000.20));
employees.add(new Employee(6,"zhangsan6",35,6000.20));
employees.add(new Employee(7,"zhangsan7",30,5000.20));
employees.add(new Employee(8,"zhangsan8",30,4000.20));
employees.add(new Employee(9,"zhangsan9",30,5000.20));
employees.add(new Employee(10,"zhangsan10",28,5000.20));
employees.add(new Employee(11,"zhangsan11",30,5000.20));
employees.add(new Employee(12,"zhangsan12",30,5000.20));
employees.add(new Employee(13,"zhangsan13",18,5000.20));
employees.add(new Employee(14,"zhangsan14",35,5000.20));
System.out.println("employees总数:"+employees.size());
//filter的使用
System.out.println("------filter的使用--------");
System.out.println("1.过滤筛选出年龄大于等于30的员工");
List<Employee> employees1 = employees.stream().filter((e) -> {
return e.getAge() >= 30;
}).collect(Collectors.toList());
employees1.stream().forEach(System.out::println);
System.out.println("总数: " +employees1.size());
System.out.println("2.过滤筛选出年龄大于等于30的员工,取前三");
List<Employee> employees2 = employees.stream().filter((e) -> {
return e.getAge() >= 30;
}).limit(3).collect(Collectors.toList());;
employees2.stream().forEach(System.out::println);
System.out.println("总数: " +employees2.size());
System.out.println("------skip的使用--------");
System.out.println("skip: 跳过元素");
List<Employee> employees3 = employees.stream().filter((e) -> {
return e.getAge() >= 30;
}).skip(2).collect(Collectors.toList());;
employees3.stream().forEach(System.out::println);