package com.expgiga.Java8;
/**
*
*/
public class Employee {
private String
name;
private int age;
private double salary;
private int id;
public Employee() {
}
public Employee(String name,
int age,
double salary) {
this.
name = name;
this.
age = age;
this.
salary = salary;
}
public String getName() {
return name;
}
public void setName(String name) {
this.
name = name;
}
public int getAge() {
return age;
}
public void setAge(
int age) {
this.
age = age;
}
public double getSalary() {
return salary;
}
public void setSalary(
double salary) {
this.
salary = salary;
}
@Override
public String toString() {
return "Employee{" +
"name='" +
name +
'\'' +
", age=" +
age +
", salary=" +
salary +
'}';
}
public Employee(
int id) {
this.
id = id;
}
public Employee(
int id,
int age) {
this.
id = id;
this.
age = age;
}
@Override
public boolean equals(Object o) {
if (
this == o)
return true;
if (o ==
null || getClass() != o.getClass())
return false;
Employee employee = (Employee) o;
if (
age != employee.
age)
return false;
if (Double.
compare(employee.
salary,
salary) !=
0)
return false;
if (
id != employee.
id)
return false;
return name !=
null ?
name.equals(employee.
name) : employee.
name ==
null;
}
@Override
public int hashCode() {
int result;
long temp;
result =
name !=
null ?
name.hashCode() :
0;
result =
31 * result +
age;
temp = Double.
doubleToLongBits(
salary);
result =
31 * result + (
int) (temp ^ (temp >>>
32));
result =
31 * result +
id;
return result;
}
}
package com.expgiga.Java8;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.stream.Stream;
/**
* Java8 Stream
*
* 一、Stream的三个操作步骤:
* 1. 创建Stream
* 2. 中间操作
* 3. 终止操作(终端操作)
*/
public class TestStream2 {
public static void main(String[] args) {
/*
* 中间操作:
* filter:接受Lambda,从流中排出某些元素。
* limit:截断流,使其元素不超过给定数量
* skip:跳过元素,返回一个扔掉了前n个元素的流。若流中元素不足n个,则返回一个空流。与Limit(n)互补
* distinct:筛选,通过流所生成元素的hashCode()和equals()去除重复元素
*
*/
//内部迭代:迭代操作由Stream API完成
List<Employee> employeeList = Arrays.
asList(
new Employee(
"zhangsan",
18,
19999),
new Employee(
"lisi",
28,
29999),
new Employee(
"wangwu",
38,
39999),
new Employee(
"zhaoliu",
16,
17999),
new Employee(
"tianqi",
6,
12999),
new Employee(
"tianqi",
6,
12999),
new Employee(
"tianqi",
6,
12999)
);
/*
* 映射
* map
* flatMap
*/
//map
List<String> list = Arrays.
asList(
"aa",
"bb",
"cc",
"dd",
"ee");
list.stream()
.map((str) -> str.toUpperCase())
.forEach(System.
out::println);
employeeList.stream()
.map(Employee::getName)
.forEach(System.
out::println);
//
Stream<Stream<Character>> streamStream = list.stream()
.map(TestStream2::
filterCharacter);
streamStream.forEach((sm) -> {
sm.forEach(System.
out::println);
//{{a,a},{b,b},{c,c},{d,d},{e,e}}
});
//flatMap
list.stream()
.flatMap(TestStream2::
filterCharacter)
.forEach(System.
out::println);
//{a,a,b,b,c,c,d,d,e,e}
//对比add(Object obj) addAll(Collection coll)
List list2 =
new ArrayList<>();
list2.add(
11);
list2.add(
22);
list2.add(
33);
list2.add(list);
System.
out.println(list2);
list2.addAll(list);
System.
out.println(list2);
}
private static Stream<Character> filterCharacter(String str) {
List<Character> list =
new ArrayList<>();
for (Character ch : str.toCharArray()) {
list.add(ch);
}
return list.stream();
}
}