public class StreamApiTest {
@Test
public void test01() {
List<Student> list = Student.getList();
Stream<Student> stream = list.stream();
Stream<Student> parallelStream = list.parallelStream();
int[] arr = new int[]{1, 2, 3, 4, 5, 6};
IntStream intStream = Arrays.stream(arr);
Student s1 = new Student(1L, "肖战", 15, true);
Student s2 = new Student(2L, "王一博", 15, true);
Student[] students = new Student[]{s1, s2};
Stream<Student> studentStream = Arrays.stream(students);
Stream<Integer> integerStream = Stream.of(1, 2, 3, 4, 5, 6);
Stream.iterate(0, t -> t + 2).limit(10).forEach(System.out::println);
Stream.generate(Math::random).limit(10).forEach(System.out::println);
}
@Test
public void test02(){
List<Student> students = Student.getList();
students.stream().filter(student -> student.getAge()>16).forEach(System.out::println);
students.stream().limit(2).forEach(System.out::println);
students.stream().skip(3).forEach(System.out::println);
ArrayList<Student> students1 = new ArrayList<>(students);
students1.add(new Student(1L,"肖战", 15, true));
students1.stream().distinct().forEach(System.out::println);
List<String> list = Arrays.asList("aa", "bb", "cc", "dd");
list.stream().map(String::toUpperCase).forEach(System.out::println);
students.stream().map(Student::getName).filter(name->name.length()>2).forEach(System.out::println);
List<Integer> list2 = Arrays.asList(12, 43, 65, 34, 87, 0, -98, 7);
list2.stream().sorted().forEach(System.out::println);
students.stream().sorted((s1,s2)->Integer.compare(s1.getAge(),s2.getAge())).forEach(System.out::println);
students.stream().sorted(Comparator.comparingInt(Student::getAge)).forEach(System.out::println);
}
@Test
public void test03(){
List<Student> students = Student.getList();
boolean allMatch = students.stream().allMatch(student -> student.getAge() > 14);
if (allMatch){
System.out.println("所有学生都满15周岁");
}
boolean anyMatch = students.stream().anyMatch(s -> "肖战".equals(s.getName()));
if (anyMatch){
System.out.println("学生中有叫肖战的学生");
}
boolean noneMatch = students.stream().noneMatch(student1 -> "杨洋".equals(student1.getName()));
if (noneMatch){
System.out.println("没有叫杨洋的同学");
}
Optional<Student> first = students.stream().findFirst();
Optional<Student> any = students.stream().findAny();
long count = students.stream().filter(student -> student.getAge()>15).count();
Optional<Integer> max = students.stream().map(Student::getAge).max(Integer::compareTo);
Optional<Integer> min = students.stream().map(Student::getAge).min(Integer::compareTo);
students.stream().forEach(System.out::println);
List<Integer> list = Arrays.asList(1,2,3,4,5,6,7,8,9,10);
Integer reduce = list.stream().reduce(0, Integer::sum);
Optional<Integer> reduce1 = students.stream().map(Student::getAge).reduce(Integer::sum);
List<Student> collect = students.stream().filter(student -> student.getAge() > 15).collect(Collectors.toList());
Set<Student> set = students.stream().filter(student -> student.getAge() > 15).collect(Collectors.toSet());
ArrayList<Student> arrayList = students.stream().collect(Collectors.toCollection(ArrayList::new));
long count1 = students.stream().collect(Collectors.counting());
Integer sum = students.stream().collect(Collectors.summingInt(Student::getAge));
Double avg = students.stream().collect(Collectors.averagingInt(Student::getAge));
IntSummaryStatistics statistics = students.stream().collect(Collectors.summarizingInt(Student::getAge));
System.out.println(statistics);
String joining= students.stream().map(Student::getName).collect(Collectors.joining());
System.out.println(joining);
Optional<Student> maxBy = students.stream().collect(Collectors.maxBy(Comparator.comparingInt(Student::getAge)));
Optional<Student> minBy = students.stream().collect(Collectors.minBy(Comparator.comparingInt(Student::getAge)));
int total=students.stream().collect(Collectors.reducing(0, Student::getAge, Integer::sum));
int collectingAndThen= list.stream().collect(Collectors.collectingAndThen(Collectors.toList(), List::size));
Map<Integer, List<Student>> groupingBy = students.stream().collect(Collectors.groupingBy(Student::getAge));
Map<Boolean, List<Student>> partitioningBy = students.stream().collect(Collectors.partitioningBy(Student::getIsMale));
System.out.println(partitioningBy);
}
}
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Student {
private Long id;
private String name;
private int age;
private Boolean isMale;
public static List<Student> getList() {
Student s1 = new Student(1L, "肖战", 15, true);
Student s2 = new Student(2L, "王一博", 15, true);
Student s3 = new Student(3L, "杨紫", 17, false);
Student s4 = new Student(4L, "李现", 18, true);
return new ArrayList<Student>() {{
add(s1);
add(s2);
add(s3);
add(s4);
}};
}
}