// 静态方法流
Stream.of(1, 2, 3, 4);
// 集合流
new ArrayList<>().stream();
// 数组流
Arrays.stream(new int[5]);
Person类
package com.xiaoge.stream;
import lombok.*;
/**
* @Classname Person
* @Date 2022/8/5 9:43
* @Created by ZhangXiao
* @Description TODO
*/
@ToString
@AllArgsConstructor
@NoArgsConstructor
@Data
@Builder
public class Person {
private String name;
private Integer age;
private String sex;
}
StreamTest类
/**
* @Classname StreamTest
* @Date 2022/8/5 9:42
* @Created by ZhangXiao
* @Description TODO
*/
public class StreamTest {
public static void main(String[] args) {
List<Person> list = new ArrayList<>();
Person person1 = new Person("张三", 18, "男");
Person person2 = new Person("李四", 20, "男");
Person person3 = new Person("王五", 25, "女");
Person person4 = new Person("赵七", 30, "男");
list.add(person1);
list.add(person2);
list.add(person3);
list.add(person4);
}
}
// 收集所有对象的age, 收集成一个list
List<Integer> ages = list
.stream()
.map(Person::getAge)
.collect(Collectors.toList());
System.out.println(ages);
// 结果
[18, 20, 25, 30]
List<String> list = Arrays.asList("hello", "xiaoge");
System.out.println(list);
List<String> collect1 = list
.stream()
.map(x -> x.split(""))
.flatMap(Arrays::stream)
.collect(Collectors.toList());
System.out.println(collect1);
// 结果
[hello, xiaoge]
[h, e, l, l, o, x, i, a, o, g, e]
List<Person> sexList = list
.stream()
.filter(person -> "女".equals(person.getSex()))
.collect(Collectors.toList());
System.out.println(sexList);
// 结果
[Person(name=王五, age=25, sex=女)]
// 只取前面两个对象
list.stream().limit(2).forEach(System.out::println);
// 结果
Person(name=张三, age=18, sex=男)
Person(name=李四, age=20, sex=男)
// 跳过前2个截取
list.stream().skip(2).forEach(System.out::println);
// 结果
Person(name=王五, age=25, sex=女)
Person(name=赵七, age=30, sex=男)
List<Person> list = new ArrayList<>();
Person person1 = new Person("张三", 18, "男");
Person person2 = new Person("李四", 20, "男");
Person person3 = new Person("王五", 25, "女");
Person person4 = new Person("赵七", 30, "男");
Person person5 = new Person("赵七", 30, "男");
list.add(person1);
list.add(person2);
list.add(person3);
list.add(person4);
list.add(person5);
// 去重
list.stream().distinct().forEach(System.out::println);
// 结果
Person(name=张三, age=18, sex=男)
Person(name=李四, age=20, sex=男)
Person(name=王五, age=25, sex=女)
Person(name=赵七, age=30, sex=男)
List<Person> list2 = list.stream()
.sorted((x, y) -> {
return x.getAge().compareTo(y.getAge());
}).collect(Collectors.toList());
System.out.println(list2);
Map<String, Integer> map = list
.stream()
.collect(Collectors.toMap(Person::getName, Person::getAge));
map.forEach((key, value) -> {
System.out.println("key: " + key + " value: " + value);
});
// 结果
key: 李四 value: 20
key: 张三 value: 18
key: 王五 value: 25
key: 赵七 value: 30
Map<String, List<Person>> map = list
.stream()
.collect(Collectors.groupingBy(Person::getSex));
map.forEach((key, value) -> {
System.out.println("key: " + key + " value: " + value);
});
// 结果
key: 女 value: [Person(name=王五, age=25, sex=女)]
key: 男 value: [Person(name=张三, age=18, sex=男), Person(name=李四, age=20, sex=男), Person(name=赵七, age=30, sex=男)]
// 有一个或一个以上的元素满足函数参数计算结果为true
boolean match = list.stream().anyMatch(x -> x.getAge() == 18);
// 全部满足函数计算及结果为true
boolean allMatch = list.stream().allMatch(x -> x.getAge() == 18);
// 不包含有满足这个判断的元素或者流中元素为空的时候方法返回true
boolean noneMatch = list.stream().noneMatch(x -> x.getAge() == 18);
// 查找第一个
Person person = list.stream().findFirst().get();
// 正常情况下一般会取第一个元素,在并行流的情况下会随机取一个元素 list.parallelStream()并行流
Person person5 = list.stream().findAny().get();
// 数量
long count = list.stream().count();
// 年龄最大
Person person6 = list.stream().max((x, y) -> x.getAge().compareTo(y.getAge())).get();
// 年龄最小
Person person7 = list.stream().min(Comparator.comparing(Person::getAge)).get();
System.out.println(match);
System.out.println(allMatch);
System.out.println(noneMatch);
System.out.println(person);
System.out.println(person5);
System.out.println(count);
System.out.println(person6);
System.out.println(person7);
// 结果
true
false
false
Person(name=张三, age=18, sex=男)
Person(name=张三, age=18, sex=男)
4
Person(name=赵七, age=30, sex=男)
Person(name=张三, age=18, sex=男)
//ma->reduce
Integer sum = list
.stream()
.map(Person::getAge)
.reduce(Integer::sum).get();
System.out.println(sum);
//设置初始值
List<Integer> list = Arrays.asList(1, 2, 3);
System.out.println(list.stream().reduce(100, (x, y) -> x * y));
//不设置初始值
List<Integer> list = Arrays.asList(2, 2, 3);
System.out.println(list.stream().reduce( (x, y) -> x * y));
// 结果
93
600
Optional[12]