Stream API(学习笔记)
package com.atguigu.java8;
import org.testng.annotations.Test;
import java.util.*;
import java.util.stream.Stream;
public class TestStreamAPI2 {
List emplyees = Arrays.asList(
new Employee("张三", 18, 1132),
new Employee("李四", 48, 1232),
new Employee("王五", 18, 3432),
new Employee("赵六", 45, 1232),
new Employee("赵六", 45, 1232),
new Employee("赵六", 45, 1232)
);
// 中间操作 不会有任何结果,需要终止操作才有结果
@Test
public void test7(){
List list = Arrays.asList("sss","bbb","aaa","ccc","ddd");
list.stream()
.sorted()
.forEach(System.out::println);
System.out.println("-----------------------------");
// 这里有问题暂时解决不了,主要是getAge()用不了equals和compareTo两个方法
}
@Test
public void test5(){
List list = Arrays.asList("aaa","bbb","ccc","ddd");
list.stream()
.map((str) -> str.toUpperCase())
.forEach(System.out::println);
System.out.println("---------------------------------");
emplyees.stream()
.map(Employee::getAge)
.forEach(System.out::println);
System.out.println("---------------------------------");
Stream> stream = list.stream()
// map 返回的是一个Stream流,其Stream<参数>中的参数看的是TestStreamAPL2::filterCharacter该函数的返回类型Stream
.map(TestStreamAPI2::filterCharacter); // {{a,a,a},{b,b,b}}
stream.forEach((sm) -> {
sm.forEach(System.out::println);
});
System.out.println("-------------------------------------");
Stream stream2 = list.stream()
.flatMap(TestStreamAPI2::filterCharacter); //{a,a,a,b,b,b}
stream2.forEach(System.out::println);
}
// 自己定义一个方法名为 filterCharacter
public static Stream filterCharacter(String s){
List list = new ArrayList<>();
for (Character character : s.toCharArray()) {
list.add(character);
}
return list.stream();
}
@Test
public void test4() {
emplyees.stream()
.filter((e) -> e.getSalary() > 1200)
.skip(1)
.distinct()
.forEach(System.out::println);
}
@Test
public void test3() {
// Stream stream = emplyees.stream()
// .filter((e) -> e.getAge() > 35)
// .limit(1);
// stream.forEach(System.out::println);
emplyees.stream()
.filter((e) -> {
System.out.println("段落");
return e.getSalary() > 1000;
})
.limit(2)
.forEach(System.out::println);
}
//内部迭代:迭代操作由Stream APL 完成
@Test
public void test1() {
// 中间操作:不会执行任何操作
Stream stream = emplyees.stream()
.filter((e) -> {
System.out.println("Stream APL 的中间操作");
return e.getAge() > 35;
});
// 终止操作:一次执行全部中间内容,“惰性求值”
stream.forEach(System.out::println);
}
//外部迭代
@Test
public void test2() {
Iterator it = emplyees.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
}
// 测试集合中的add(Object obj) 和 addAll(Collection c)
@Test
public void test6(){
List list = Arrays.asList("aaa","bbb","ccc","ddd");
List