当前位置: 代码迷 >> 综合 >> Java8 Stream常用api总结(一)
  详细解决方案

Java8 Stream常用api总结(一)

热度:77   发布时间:2023-11-27 05:57:44.0

以学生对象为例,列举常见的一些使用场合,具体如下:

public class StreamLearn {private static List<Student> list;static {list = new ArrayList<>();list.add(new Student(1, "小明", 18, 85L));list.add(new Student(2, "张三", 19, 81L));list.add(new Student(3, "李四", 20, 79L));list.add(new Student(4, "王二", 15, 90L));list.add(new Student(4, "王三", 18, 90L));}public static void main(String[] args) {//需求1:筛选出成年人(年龄大于等于18) (filter、collect)List<Student> collect = list.stream().filter(student -> student.getAge() >= 18).collect(Collectors.toList());System.out.println(collect);//需求2:只要成年人的名字(filter、map、collect)List<String> collect1 = list.stream().filter(student -> student.getAge() >= 18).map(Student::getName).collect(Collectors.toList());System.out.println(collect1);//需求3:按照成绩排个序(sorted、map、collect)List<String> collect2 = list.stream().sorted((s1, s2) -> (int) (s1.getScore() - s2.getScore())).map(Student::getName).collect(Collectors.toList());System.out.println(collect2);//需求4:根据姓氏的开头字母来排序(map、sorted、collect)List<String> collect3 = list.stream().map(Student::getName).sorted(Comparator.naturalOrder()).collect(Collectors.toList()); //Comparator.naturalOrder()返回的也是一个ComparatorList<String> collect4 = list.stream().map(Student::getName).sorted((name1, name2) -> name1.length() - name2.length()).collect(Collectors.toList());List<String> collect5 = list.stream().sorted((student1, student2) -> student1.getName().compareTo(student2.getName())).map(Student::getName).collect(Collectors.toList());System.out.println(collect3);System.out.println(collect4);System.out.println(collect5);//需求5:查出成绩排名第二第三的学生姓名(sorted、skip、limit、map、collect)List<String> collect6 = list.stream().sorted((student1, student2) -> (int) (student1.getScore() - student2.getScore())).skip(1).limit(2).map(Student::getName).collect(Collectors.toList());System.out.println(collect6);//需求6:将id和姓名封装成键值对,方便查找(list ——> map)
//        Map<Integer, String> collect7 = list.stream().collect(Collectors.toMap(Student::getId, Student::getName));
//        System.out.println(collect7);//上述写法如果有重复的id,即key重复时,会直接抛错,我们也可以指定一下如果出现重复key,采用的策略Map<Integer, String> collect8 = list.stream().collect(Collectors.toMap(Student::getId, Student::getName, (preKey, nextKey) -> preKey));//保留先出现的keySystem.out.println(collect8);}
}@Data
@AllArgsConstructor
@NoArgsConstructor
class Student{private Integer id;private String name;private Integer age;private Long score;
}

 

  相关解决方案