EmployData java
import java.util.ArrayList;
import java.util.List;
/**
* Created by cute coder
* 2021/9/10 23:05
*/
public class EmployData {
public static List<Employee> getEmployees(){
ArrayList<Employee> list = new ArrayList<>();
list.add(new Employee(1001,"马化腾",34,6000.38));
list.add(new Employee(1002,"马云",12,9876.12));
list.add(new Employee(1003,"刘强东",33,3000.82));
list.add(new Employee(1004,"雷军",26,7657.37));
list.add(new Employee(1005,"李彦宏",65,5555.32));
list.add(new Employee(1006,"比尔盖茨",42,9500.43));
list.add(new Employee(1007,"任正非",26,4333.32));
list.add(new Employee(1008,"扎克伯格",35,2500.32));
return list;
}
}
import org.junit.Test;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;
/**
* 测试Stream的中间操作
* Created by cute coder
* 2021/9/10 23:30
*/
public class StreamAPITest1 {
/**
* 1-筛选与切片
*/
@Test
public void test1(){
List<Employee> list = EmployData.getEmployees();
//filter(Predicate p)-接收lambda,从流中排除某些元素
Stream<Employee> stream = list.stream();
stream.filter(e ->e.getSalary() >7000).forEach(System.out::println);
System.out.println("*******************");
//limit(n)-截断流,使其元素不超过给定数量
list.stream().limit(3).forEach(System.out::println);
//skip(n)-跳过元素,返回一个扔掉了前n个元素的流;若元素不足n个,则返回空流
System.out.println("*******************");
list.stream().skip(3).forEach(System.out::println);
//distinct()-筛选,通过流所生成元素的hashcode()和equals() 去除重复元素
list.add(new Employee(1010,"刘强东",40,8000));
list.add(new Employee(1010,"刘强东",40,8000));
list.add(new Employee(1010,"刘强东",40,8000));
list.add(new Employee(1010,"刘强东",40,8000));
list.add(new Employee(1010,"刘强东",41,8000));
System.out.println("list = " + list.toString());
list.stream().distinct().forEach(System.out::println);
}
/**
* 2-映射
*/
@Test
public void test2(){
//map(Function f)-接收一个函数作为参数,将元素转换成其他形式提取信息,
//该函数会被应用到每个元素上,并将其映射成一个新的元素
// 同list.add()
List<String> list = Arrays.asList("aa", "bb","cc","dd");
list.stream().map(str ->str.toUpperCase()).forEach(System.out::println);
//联系1.获取姓名长度>3的
List<Employee> employees = EmployData.getEmployees();
employees.stream().map(Employee::getName).filter(name ->name.length()>3).forEach(System.out::println);
//flatMap(Function f)-接收一个函数作为参数,将流中的每一个值都换成另一个流,然后把所有的
//同list.addALL()
//练习2.
Stream<Stream<Character>> streamStream = list.stream().map(StreamAPITest1::fromStringToStream);
System.out.println("****************map***********");
streamStream.forEach((s)->{
s.forEach(System.out::println);
});
Stream<Character> characterStream = list.stream().flatMap(StreamAPITest1::fromStringToStream);
System.out.println("****************flatmap***********");
characterStream.forEach(System.out::println);
}
//将字符串中的多个字符构成的集合转换为相应的stream的实例
public static Stream<Character> fromStringToStream(String str) {
//aa
ArrayList<Character> list = new ArrayList<>();
for (Character c : str.toCharArray()) {
list.add(c);
}
return list.stream();
}
/**
* 2-映射
*/
@Test
public void test3(){
ArrayList list1 = new ArrayList();
list1.add(1);
list1.add(2);
list1.add(3);
ArrayList list2 = new ArrayList();
list2.add(4);
list2.add(5);
list2.add(6);
//list1.add(list2);
//一共四个元素
System.out.println(list1);
list1.addAll(list2);
System.out.println("list1 = " + list1);
}
/**
* 3-排序
*/
@Test
public void test4(){
//sorted()-自然排序
List<Integer> list = Arrays.asList(12, 43, 65, 34, 87, 0, -98, 7);
//默认从小到大
list.stream().sorted().forEach(System.out::println);
List<Employee> employees = EmployData.getEmployees();
//抛异常了 Employee cannot be cast to java.lang.Comparable
// employees.stream().sorted().forEach(System.out::println);
//sorted(Comparator com)-定制排序
List<Employee> employeeList = EmployData.getEmployees();
//按年龄从小到大
System.out.println("************按年龄从小到大******************");
employeeList.stream().sorted((e1,e2) ->Integer.compare(e1.getAge(),e2.getAge())).forEach(System.out::println);
//按年龄\从小到达
System.out.println("************先按年龄从小到大,相等的按工资从少到多******************");
employeeList.stream().sorted((e1,e2) ->{
int ageValue = Integer.compare(e1.getAge(), e2.getAge());
if (ageValue!=0) {
return ageValue;
} else {
return Double.compare(e1.getSalary(),e2.getSalary());
}
}
).forEach(System.out::println);
}
}