Stream流的操作及方法汇总
Stream流的操作及方法汇总
方法 作用
filter() 接收lambda,从流中排除某些操作
limit() 截断流,使其元素不超过给定对象
skip(n) 跳过元素,返回一个扔掉了前n个元素的流,若流中元素不足n个,则返回一个空流,与limit(n)互补
distinct 筛选,通过流所生成元素的hashCode()和equals去除重复元素
map 接受Lambda,将元素转换成其他形式或提取信息。接受一个函数作为参数,该函数会被应用到每个元素上,并将其映射成一个新的元素
sorted() 自然排序(Comparable)
sorted(Comparator com) 定制排序(Comparator)
allMatch 检查是否匹配所有元素
anyMatch 检查是否至少匹配一个元素
noneMatch 检查是否没有匹配所有元素
findFirst 返回第一个元素
findAny 返回当前流中的任意元素
count 返回流中元素的总个数
max 返回流中最大值
min 返回流中最小值
reduce 归约操作可以将流中元素反复结合起来,得到一个值
collect 将流转换为其他形式,接收一个Collector接口实现,用于给Stream中汇总的方法
public static void main(String[] args) { List<User> list = getUserList(); list.stream().forEach(user -> System.out.println("id:"+user.getId()+",姓名:"+user.getName()+",年龄:"+user.getAge())); //getFilter(list); //getSkipLimit(list); //getDistinct(list); //; //Stream<User> stream = list.stream().sorted(); //reduce和max和min System.out.println(list.stream().map(User::getAge).reduce(1000,Integer::sum)); System.out.println(list.stream().map(User::getAge).max(Integer::compare).get()); System.out.println(list.stream().map(User::getAge).min(Integer::compare).get()); } private static void getFindFirstAndFindAny(List<User> list){ //User userModel = list.stream().filter( user -> user.getAge()>500&&user.getAge()<1000).findFirst().get(null); //orElse如果流中没有数据就返回空 User userModel = list.stream().filter( user -> user.getAge()>500&&user.getAge()<1000).findAny().orElse(null); System.out.println(userModel.toString()); } private static void getMath(List<User> list){ //这里使用Age做匹配 //allMatch是否所有数据都满足500<age<1000 //anyMatch 查看是否有一条数据是 //noneMatch 所有数据都不满足 Boolean bl = list.stream().anyMatch(user -> user.getAge()>500&&user.getAge()<1000); System.out.println(bl); if(bl){ list.stream().filter(user -> user.getAge()>500&&user.getAge()<1000).forEach(user -> System.out.println(user.toString())); } } //sorted和map private static void getSortedAndMap(List<User> list){ Stream<Object> stream = list.stream().sorted(Comparator.comparing(User::getAge).reversed()).map(user -> user.getName()); stream.forEach(user -> System.out.println(user.toString())); } private static void getDistinct(List<User> list){ //去重 Stream<User> stream = list.stream().distinct(); stream.forEach(user -> System.out.println(user.getName())); } private static void getSkipLimit(List<User> list){ //skip() 和 limit() /** * 单用limit的话就是从第0个开始 * skip也是从0开始 */ Stream<User> stream = list.stream().skip(4).limit(3); stream.forEach(user -> System.out.println(user.getName())); } public static void getFilter( List<User> list){ //filter()排除 //forEach循环便利 list.stream().filter(user -> !user.getAge().equals("170")).forEach(user -> System.out.println(user.getName())); System.out.println("======================================"); //这两个相等 Stream<User> stream = list.stream().filter(user -> !user.getAge().equals("170")); stream.forEach(user -> System.out.println(user.getName())); } // public static List<User> getUserList(){ User user = new User(""+((int)(Math.random()*1000000000)+1000000),"李白",1000); User user1 = new User(""+((int)(Math.random()*1000000000)+1000000),"周树人",170); User user2 = new User(""+((int)(Math.random()*1000000000)+1000000),"白居易",900); User user3 = new User(""+((int)(Math.random()*1000000000)+1000000),"林则徐",780); User user4 = new User(""+((int)(Math.random()*1000000000)+1000000),"赵亦",970); User user5 = new User(""+((int)(Math.random()*1000000000)+1000000),"卫东来",1100); List<User> list = new ArrayList<>(); list.add(user); list.add(user1); list.add(user2); list.add(user3); list.add(user4); list.add(user5); list.add(user5); return list; }