使用到的实体类
实体类1
public class Person {
private String name;
private int salary;
private int age;
private String sex;
private String area;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getSalary() {
return salary;
}
public void setSalary(int salary) {
this.salary = salary;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getArea() {
return area;
}
public void setArea(String area) {
this.area = area;
}
public Person(String name, int salary, int age, String sex, String area) {
this.name = name;
this.salary = salary;
this.age = age;
this.sex = sex;
this.area = area;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", salary=" + salary +
", age=" + age +
", sex='" + sex + '\'' +
", area='" + area + '\'' +
'}';
}
}
实体类2
public class PersonDto {
private String name;
private int salary;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getSalary() {
return salary;
}
public void setSalary(int salary) {
this.salary = salary;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public PersonDto(String name, int salary, int age) {
this.name = name;
this.salary = salary;
this.age = age;
}
@Override
public String toString() {
return "PersonDto{" +
"name='" + name + '\'' +
", salary=" + salary +
", age=" + age +
'}';
}
}
创建一个集合
public static List<Person> getPersonList() {
List<Person> personList = new ArrayList<Person>();
personList.add(new Person("Tom", 8900, 18, "male", "New York"));
personList.add(new Person("Jack", 7000, 19, "male", "Washington"));
personList.add(new Person("Lily", 7800, 20, "female", "Washington"));
personList.add(new Person("Anni", 8200, 38, "female", "New York"));
personList.add(new Person("Owen", 9500, 58, "male", "New York"));
personList.add(new Person("Alisa", 7900, 38, "female", "New York"));
personList.add(new Person("Alisa", 7900, 38, null, "New York"));
return personList;
}
foreach使用
public static void main(String[] args) {
List<Person> personList = getPersonList();
personList.stream().forEach(s -> s.setSalary(s.getSalary() + 1000));
}
filter使用
public static void main(String[] args) {
List<Person> personList = getPersonList();
List<Person> personList1 = personList.stream().filter(s -> s.getSalary() > 8000 && "male".equals(s.getSex())).toList();
System.out.println(personList1);
Person person = personList.stream().filter(s -> s.getSalary() > 8000).findFirst().orElse(null);
System.out.println(person);
Person person1 = personList.stream().filter(s -> s.getSalary() > 8000).skip(personList.size() - 1).findFirst().orElse(null);
}
映射(map)
public static void main(String[] args) {
List<Person> personList = getPersonList();
List<String> nameList = personList.stream().map(Person::getName).toList();
List<String> newNameList = personList.stream().map(s->"RRR"+s.getName()).toList();
List<PersonDto> personList2 = personList.stream().map(s -> {
return new PersonDto(s.getName(), s.getSalary(), s.getAge());
}).collect(Collectors.toList());
System.out.println("转换成新的对象==" + personList2);
}
聚合(max/min/count)
public static void main(String[] args) {
List<Person> personList = getPersonList();
Integer maxAge = personList.stream().map(Person::getAge).max(Comparator.comparing(Integer::valueOf)).orElse(null);
System.out.println("年龄的最大值===" + maxAge);
Integer maxAge2 = personList.stream().map(Person::getAge).reduce(Integer::max).get();
System.out.println("年龄的最大值====方式2===" + maxAge2);
Integer minAge = personList.stream().map(Person::getAge).min(Comparator.comparing(Integer::valueOf)).orElse(null);
System.out.println("年龄的最小值===" + minAge);
Integer minAge2 = personList.stream().map(Person::getAge).reduce(Integer::min).get();
System.out.println("年龄的最小值====方式2===" + minAge2);
Integer sumSalary = personList.stream().map(Person::getSalary).reduce(0, Integer::sum);
System.out.println("获取集合中工资总和===" + sumSalary);
Integer sumSalary2 = personList.stream().map(Person::getSalary).mapToInt(Integer::valueOf).sum();
System.out.println("获取集合中工资总和=====方式2 ===" + sumSalary2);
Double avgSalary = personList.stream().mapToDouble(Person::getSalary).average().orElse(0);
System.out.println("获取集合中工资总和===" + avgSalary);
long count = personList.stream().filter(s -> s.getSalary() > 8000).count();
System.out.println("获取集合中工资大于8000的人数===" + count);
}
collect使用
public static void main(String[] args) {
List<Person> personList = getPersonList();
List<String> namesList = personList.stream().map(Person::getName).collect(Collectors.toList());
Set<String> namesSet = personList.stream().map(Person::getName).collect(Collectors.toSet());
Map<String, Person> highestSalaryBySex = personList.stream()
.collect(Collectors.groupingBy(s-> Optional.ofNullable(s.getSex()).orElse(""),
Collectors.maxBy(Comparator.comparing(Person::getSalary))))
.entrySet().stream()
.collect(Collectors.toMap(Map.Entry::getKey, e -> e.getValue().orElse(null)));
System.out.println(highestSalaryBySex);
}
排序使用(sorted)
public static void main(String[] args) {
List<Person> personList = getPersonList();
List<Integer> list = personList.stream().map(Person::getAge).collect(Collectors.toList());
list.sort(Integer::compareTo);
list.sort(Comparator.reverseOrder());
list.sort(Comparator.naturalOrder());
List<Person> sortPersonList = personList.stream().sorted(Comparator.comparing(Person::getAge).
thenComparing(Person::getSalary, Comparator.reverseOrder())).collect(Collectors.toList());
}