开发手册 欢迎您!
软件开发者资料库

Java Stream limit、skip 和 sort 的使用

Stream是Java 8的新特性,基于lambda表达式,是对集合对象功能的增强,它专注于对集合对象进行各种高效、方便聚合操作或者大批量的数据操作,提高了编程效率和代码可读性。本文主要介绍Java Stream中 limit、skip截取流中元素和sort排序的使用,以及相关的示例代码。

1、limit和skip截取数据

可以使用limit()skip()截取流中某一段数据,例如,

import java.util.*;import java.util.stream.Collectors;import java.util.stream.Stream;public class Main {   public static class Person {     int age;     Person (int age) {         this.age = age;     }     public int getAge() {         return age;     }     public void setAge(int age) {         this.age = age;     }  }public static void main(String[] args) {    List list1 = Arrays.asList(new Person(11),new Person(22), new Person(33), new Person(44), new Person(55));    list1.stream().forEach(o->{       System.out.println("stream() :"+o.getAge());    });    //截取前n个元素    List list2 = list1.stream().limit(3).collect(Collectors.toList());    list2.stream().forEach(o->{       System.out.println("stream() limit(3):"+o.getAge());    });    //跳过前n个元素    List list3 = list1.stream().skip(3).collect(Collectors.toList());    list3.stream().forEach(o->{       System.out.println("stream() skip(3):"+o.getAge());    });    List list4 = list1.stream().skip(2).limit(2).collect(Collectors.toList());    list4.stream().forEach(o->{       System.out.println("stream() skip(2) limit(2):"+o.getAge());    });    System.exit(0); //success  }}

2、使用sorted()排序

排序有两个方法,一是sorted(),二是sorted(Comparator comparator)sorted()使用对象的compareTo()方法(需要实现Comparable接口)sorted(Comparator comparator)使用自定义的对比方法,如下,

import java.util.*;import java.util.stream.Collectors;import java.util.stream.Stream;public class Main {   public static class Person implements Comparable {        int age;        Person (int age) {            this.age = age;        }        public int getAge() {            return age;        }        public void setAge(int age) {            this.age = age;        }    /**     * 返回0,代表等于     * 返回负数,代表当前对象小于传入对象     * 返回正数,代表当前对象大于传入对象     * @param o     * @return     */    @Override    public int compareTo(Object o) {        return getAge()-((Person)o).getAge();    }  }public static void main(String[] args) {        //使用    ArrayList pList = new ArrayList<>();    pList.add(new Person(19));    pList.add(new Person(12));    pList.add(new Person(15));    pList.add(new Person(8));    pList.add(new Person(32));    pList.add(new Person(14));    pList.add(new Person(21));    //升序(如果想要降序,调整一下对比条件即可)    List list1 = pList.stream()                                .sorted()                                .collect(Collectors.toList());    list1.stream().forEach(o->{       System.out.println("stream() sort():"+o.getAge());    });    //使用自定义的排序方法    List list2 = pList.stream()                                .sorted((u1, u2) -> u1.getAge() - u2.getAge())                                .collect(Collectors.toList());    list2.stream().forEach(o->{       System.out.println("stream() sorted() lamdba:"+o.getAge());    });    //使用Comparator里面的方法    List list3 = pList.stream()                                .sorted(Comparator.comparingInt(Person::getAge))                                .collect(Collectors.toList());     list3.stream().forEach(o->{       System.out.println("stream() Comparator sorted():"+o.getAge());    });    System.exit(0); //success  }}