JDK8:集合Stream的操作

1,064 阅读2分钟
    List<Integer> list = Arrays.asList(1, 2,1, 4, 5, 3,-1);
    List<User> users = Arrays.asList(new User(1, "admin",12), new User(2, "bjh",18),new User(-1, "bjh",17));
    List l1 = new ArrayList();
  
    //取出集合总的数量
    long count = list.stream().count();
    System.out.println(count);
    //遍历集合中的所有元素
    list.stream().forEach(u->l1.add(u));
    System.out.println(l1);
    //取出集合中第一个元素
    list.stream().limit(1).forEach(System.out::println);

    Integer maxNum = list.stream().max(Integer::compare).get();
    System.out.println("最大值是 =" + maxNum);

    Integer minNum = list.stream().min(Integer::compare).get();
    System.out.println("最小值是 =" + minNum);

    //取出最大的元素
    int id = users.stream().max((o1, o2) -> {
        return o1.getId() > o2.getId() ? 1 : -1;
    }).get().getId();
    System.out.println("最大的id = " + id);
    //取出最小的元素
    int id1 = users.stream().min((o1,o2)->{
        return o1.getId() > o2.getId() ? 1 : -1;
    }).get().getId();
    System.out.println("最小的id = " + id1);

    //判断条件里的元素,所有的都满足,返回true  否则false
    boolean allMatch = list.stream().allMatch(e -> e == 1);
    System.out.println("allMatch = " +allMatch);

    //判断条件里的元素,只要有一个元素满足,返回true  否则false
    boolean anyMatch = list.stream().anyMatch(e -> e == 1);
    System.out.println("anyMatch = " +anyMatch);

    //判断条件里的元素,所有的都不满足,返回true  否则false
    boolean noneMatch = list.stream().noneMatch(e -> e == 8);
    System.out.println("noneMatch = " + noneMatch);

    //去除重复的元素
    list.stream().distinct().forEach(System.out::print);

    //将集合转换成另外一个集合
    List<Integer> list1 = list.stream().collect(Collectors.toList());
    System.out.println(list1);

    //过滤  将不满足条件的元素从集合中剔除
    list.stream().filter(e -> {
        return e == 1;
    }).forEach(System.out::print);

    list.stream().filter(e->e==1).forEach(System.out::print);

    System.out.println();
    System.out.println("随机返回一个元素 "+list.stream().findAny());
    System.out.println("返回集合第一个元素" +list.stream().findFirst());

    //map是映射,将元素进行操作,比如这里是将每个元素 乘以2
    List<Integer> list2 = list.stream().map(u -> u << 1).collect(Collectors.toList());
    System.out.println(list2);

    List<String> list3 = Arrays.asList("Hello", "World");
    list3.stream().map(u->u.split("")).flatMap(Arrays::stream).distinct().collect(Collectors.toList()).forEach(System.out::print);

    //list.stream().peek(e-> System.out.println()).forEach(e-> System.out.println(e));

    //peek在中间可以进行一些操作

    users.stream().peek(u->u.setName(u.getName()+"_test")).forEach(u-> System.out.println(u.getName()));


    //对集合中的所有元素进行聚合求值
    Integer integer = list.stream().reduce((a, b) -> a + b).get();
    System.out.println(integer);
    //对集合中的所有元素进行聚合求值,但是会给定一个初始值
    Integer reduce = list.stream().reduce(0, (a, b) -> a + b);
    //对集合中的所有元素进行聚合求值,但是会给定一个初始值,并且将结果转换成我们想要的类型
    Long reduce1 = list.stream().reduce(0L, (a, b) -> a + b, (a, b) -> 0L);

    System.out.println();
    //跳过前面三个元素,输出后面的元素.比如:[1,2,3,4,5,6]-->输出[4,5,6]
    list.stream().skip(3).forEach(System.out::print);


    System.out.println();
    //从小到大排序
    list.stream().sorted((a,b)->a.compareTo(b)).collect(Collectors.toList()).forEach(u-> System.out.println(u));
    System.out.println("====");
    //从大到小排序
    list.stream().sorted((a,b)->b.compareTo(a)).collect(Collectors.toList()).forEach(System.out::println);

    //将用户按年龄从小到大排序
    users.stream().sorted((a,b)-> a.getAge().compareTo(b.getAge())).collect(Collectors.toList()).forEach(u-> System.out.println(u.getAge()));

    //将集合转换成数组
    User[] users1 = users.stream().toArray(User[]::new);
    for (User user : users1) {
        System.out.println(user.getName());
    }