java jdk1.8新特性Stream API( 二 )




* 注重:利用distinct去重需要重写hashcode和equals方式
*/


// 内部迭代:迭代操作有Stream API完当作 。
@Test
public void test1() {
// 中心操作:不会执行任何操作
Stream<Employee> stream1 = employees.stream().filter((e) -> {
System.out.println("Stream API中心操作");
return e.getAge() > 17;
});


// 终止操作:一次性执行全数内容 , 即“惰性求值”
stream1.forEach(System.out::println);
}


// 外部迭代
@Test
public void test2() {
Iterator<Employee> it = employees.iterator();


while (it.hasNext()) {
System.out.println(it.next());
}
}


// 短路 , limit一旦找到合适的数据将不再继续执行 , 必然水平上提高了机能
@Test
public void test3() {
employees.stream().filter((e) -> {
System.out.println("短路!");
return e.getSalary() > 5000;
}).limit(2).forEach(System.out::println);
;
}


@Test
public void test4() {
employees.stream().filter((e) -> e.getSalary() > 1000).skip(2).limit(2).forEach(System.out::println);
;
}


@Test
public void test5() {
employees.stream().filter((e) -> e.getSalary() > 1000).skip(2).distinct().forEach(System.out::println);
;
}


}

java jdk1.8新特性Stream API

文章插图

java jdk1.8新特性Stream API

文章插图

3/3、Stream映射
package com.stream.api3;


import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;


import org.junit.Test;


import com.stream.api1.Employee;


public class TestStreamAPI3 {


List<Employee> employees = Arrays.asList(new Employee("张三", 12, 1200.99), new Employee("小明", 15, 4500.99),
new Employee("小丽", 16, 5500.99), new Employee("王二", 32, 1100.99), new Employee("二虎", 22, 9825.99),
new Employee("李静", 18, 4502.99), new Employee("小三", 17, 1469.99), new Employee("小三", 17, 1469.99),
new Employee("小三", 17, 1469.99), new Employee("小三", 17, 1469.99));


/**

* 映射 map —— Lambda , 将元素转换当作其它形式或提守信息 , 领受一个函数作为参数 , 改函数会被应用到每个元素上 , 并将其映射当作一个新的元素 。
* flatMap —— 领受一个函数作为参数 , 将流中的每个值都换当作另一个流 , 然后把所有的流连城一个流 。
*/
@Test
public void test6() {
List<String> list = Arrays.asList("aaa", "bbb", "bbb", "ddd");


list.stream().map((str) -> str.toUpperCase()).forEach(System.out::println);


System.out.println("---------------------------");


employees.stream().map(Employee::getName).forEach(System.out::println);


System.out.println("---------------------------");


Stream<Stream<Character>> stream = list.stream().map(TestStreamAPI3::filterCharacter);
stream.forEach((sm) -> {

推荐阅读