Stream + 并行流 +Optional +接口的方法 +日期组件+重复注解及类型注解
一、Stream流
1.终止操作 - 归约
归约:将流中的元素反复结合起来,得到一个值
map+reduce的连接通常称为map_reduce模式,因Google用它进行网络搜索而出名
方法 | 描述 |
---|---|
reduce( T identity , BinaryOperator accumulator) | 参数:(初始值,结合逻辑) |
reduce(BinaryOperator accumulator) | 参数:(结合逻辑) |
public class Student implements Comparable<Student>{
private String name;
private int age;
private double salary;
private Course course;
public Student() {
}
public Student(String name, int age, double salary, Course course) {
this.name = name;
this.age = age;
this.salary = salary;
this.course = course;
}
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;
}
public Course getCourse() {
return course;
}
public void setCourse(Course course) {
this.course = course;
}
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + ", salary=" + salary + ", course=" + course + "]";
}
@Override
public int hashCode(){
final int prime = 31;
int result = 1;
result = prime * result + age;
result = prime * result + ((course == null) ? 0 : course.hashCode());
result = prime * result + ((name == null) ? 0 : name.hashCode());
long temp;
temp = Double.doubleToLongBits(salary);
result = prime * result + (int)(temp ^ (temp >>> 32) );
return result;
}
@Override
public boolean equals(Object obj) {
if(this == obj)
return true;
if(obj == null)
return false;
if(getClass() != obj.getClass())
return false;
Student other = (Student) obj;
if(age != other.age)
return false;
if(course != other.course)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if(!name.equals(other.name))
return false;
if(Double.doubleToLongBits(salary) != Double.doubleToLongBits(other.salary))
return false;
return true;
}
@Override
public int compareTo(Student o) {
if(this == o){
return 0;
}
if (this.age != o.age) {
return Integer.compare(this.age, o.age);
}
return 1;
}
}
public enum Course {
JAVA,HTML,PYTHON;
}
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import org.junit.Test;
public class Test01 {
List<Integer> numList = Arrays.asList(1,2,3,4,5,6,7,8,9,10);
List<Student> stuList = Arrays.asList(
new Student("张三", 28, 4800,Course.JAVA),
new Student("李四", 36, 7200,Course.JAVA),
new Student("王五", 19, 9600,Course.HTML),
new Student("赵六", 42, 6100,Course.HTML),
new Student("孙七", 23, 9600,Course.PYTHON),
new Student("吴八", 31, 3000,Course.PYTHON),
new Student("李四", 36, 7200,Course.JAVA));
@Test
public void test01(){
//需求:获取numList集合中元素的总和
Integer reduce = numList.stream().reduce(0, (x,y)->x+y);
System.out.println(reduce);
}
@Test
public void test02(){
//需求:获取stuList集合中所有学生工资总和
Optional<Double> reduce = stuList.stream().map(Student::getSalary).reduce((salary1,salary2)->salary1+salary2);
Double sum = reduce.get();
System.out.println(sum);
}
}
2.终止操作 - 收集
收集:将流转换为其他形式。接收一个Collector接口的实现,用于给Stream中元素做汇总的方法
方法 | 描述 |
---|---|
collect(Collector<? super T, A, R> collector) | 把元素放入Collector集合中 |
import java.util.ArrayList;
import java.util.Arrays;
import java.util.DoubleSummaryStatistics;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors;
import org.junit.Test;
public class Test02 {
List<Student> stuList = Arrays.asList(
new Student("张三", 28, 4800,Course.JAVA),
new Student("李四", 36, 7200,Course.JAVA),
new Student("王五", 19, 9600,Course.HTML),
new Student("赵六", 42, 6100,Course.HTML),
new Student("孙七", 23, 9600,Course.PYTHON),
new Student("吴八", 31, 3000,