一,获取Stream流
- list,set
- map(先获取keys 或 values 或 entry对象)
- 数组(Arrays.stream(arr) 或 Stream.of(arr))
二,常用方法
- filter() //过滤
- sorted() //排序
- limit(int a) //取前a个元素
- skip(int a) //跳过a个元素
- distinct()
- concat(stream1,stream2) //合并流
- map() //改变元素类型
- count() //统计个数 , 返回long类型
list.stream().filter(student -> student.getScore()>60) //.sorted((o1,o2) -> Double.compare(o2.getScore(),o1.getScore())) .map(student -> student.getName()) .distinct() //.skip(list.size() - 2) .forEach(System.out::println);
- Stream.of(str) //创建Stream流
Stream<String> stream1 = Stream.of("一", "二", "三"); Stream<String> stream2 = Stream.of("四", "五", "六"); Stream.concat(stream1,stream2).forEach(s -> System.out.println(s));
- max() //取最大值,返回一个Optional对象
//把student对象包裹起来,防止对象为空,报空指针异常 Optional<Student> max = list.stream().max((o1, o2) -> Double.compare(o1.getScore(), o2.getScore())); /* Student student = max.get(); System.out.println(student);*/ max.ifPresent(student1 -> System.out.println(student1)); //判断max是否为空,不为空则打印student
- collect(Collectors.toList()) //将流中的元素放入一个新的集合(list,set,map)中去
Map<String, Double> map = list.stream().filter(s -> s.getScore() > 70) .collect(Collectors.toMap(k -> k.getName(), v -> v.getScore())); map.forEach((k, v) -> System.out.println("k:" + k + " v:" + v)); list.stream().filter(s -> s.getScore() > 70).collect(Collectors.toMap(new Function<Student, String>() { @Override public String apply(Student student) { return student.getName(); } }, new Function<Student, Double>() { @Override public Double apply(Student student) { return student.getScore(); } }));
三,对字符串数组排序
List<Integer> list = Arrays.stream(strs) .map(s1 -> Integer.valueOf(s1)) .sorted((i1, i2) -> i2 - i1) .collect(Collectors.toList());