0
点赞
收藏
分享

微信扫一扫

java 8 :stream的常用详细用法

源码之路 2022-04-07 阅读 112
java
public static void main(String[] args) {
    //排序
    //   sorted():自然排序,流中元素需实现Comparable接口
    //   sorted(Comparator com):定制排序,自定义Comparator排序器
    User user1 = new User("g", "1", "1");
    User user2 = new User("b", "2", "2");
    User user3 = new User("a", "3", "2");
    List<User> userList = Arrays.asList(user1, user2, user3);
    userList.stream().sorted(
            (o1, o2) -> {
                if (o1.getName().equals(o2.getName())){
                    return Integer.parseInt(o1.getAge()) - Integer.parseInt(o2.getAge());
                }else {
                    return o1.getName().compareTo(o2.getName());
                }
            }
    ).forEach(System.out::println);
    System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
    //映射
    //    map:接收一个函数作为参数,该函数会被应用到每个元素上,并将其映射成一个新的元素。
    //    flatMap:接收一个函数作为参数,将流中的每个值都换成另一个流,然后把所有流连接成一个流。
    List<String> list = Arrays.asList("a,b,c", "1,2,3");
    list.stream().map(s -> s.replaceAll(",","")).forEach(System.out::print);
    System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
    list.stream().flatMap(s -> {
        String[] split = s.split(",");
        Stream<String> stream = Arrays.stream(split);
        return stream;
    }).forEach(System.out::print);
    System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
    //筛选与切片
    //        filter:过滤流中的某些元素
    //        limit(n):获取n个元素
    //        skip(n):跳过n元素,配合limit(n)可实现分页
    //        distinct:通过流中元素的 hashCode() 和 equals() 去除重复元素
    Integer[] s = {1,2,3,4,5,6,7,8};
    Stream<Integer> stream = Arrays.stream(s);
    Stream<Integer> newStream = stream.filter(s1 -> s1 > 3).
             distinct()//4,5,6,7,8
            .skip(2)//6,7,8
            .limit(2);//6,7
    newStream.forEach(System.out::println);
    System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
    //消费
    //   peek:如同于map,能得到流中的每一个元素。但map接收的是一个Function表达式,有返回值;而peek接收的是Consumer表达式,没有返回值。
    User user4 = new User("g", "1", "1");
    User user5 = new User("b", "2", "2");
    List<User> users = Arrays.asList(user4, user5);
    users.stream().peek(o -> o.setAge("95")).forEach(System.out::println);
    System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
    //匹配、聚合操作
    //        allMatch:接收一个 Predicate 函数,当流中每个元素都符合该断言时才返回true,否则返回false
    //        noneMatch:接收一个 Predicate 函数,当流中每个元素都不符合该断言时才返回true,否则返回false
    //        anyMatch:接收一个 Predicate 函数,只要流中有一个元素满足该断言则返回true,否则返回false
    //        findFirst:返回流中第一个元素
    //        findAny:返回流中的任意元素
    //        count:返回流中元素的总个数
    //        max:返回流中元素最大值
    //        min:返回流中元素最小值
    List<Integer> intList = Arrays.asList(1, 2, 3, 4, 5);
    Integer integer = intList.stream().findFirst().get();
    System.out.println(integer);
    Integer integer1 = intList.stream().max(Integer::compareTo).get();
    System.out.println(integer1);
}
举报

相关推荐

0 条评论