比较接口(Comparable ,Comparator)及流的聚合操作

Comparable 及 Comparator 的区别

Comparable

一个内比较器,类可以和自己比较

compareTo() 自然比较方法

public interface Comparable<T>{
    public int compareTo(T o);
}

public class Book implements Comparable<Book>{
    String name;
    int price;

    public Book(String name,int price){
        super();
        this.name=name;
        this.price=price;
    }
    public int getPrice(){
        return price;
    }

    @override
    public int CompareTo(Book b){
        return this.price - b.getPrice();
    }

}

一个对象Collections,Arrays想自己调用sort进行自动排序,对象必须实现Comparable接口

Comparator 比较器

类本身不支持排序(没有实现comparable接口)
可建立一个类比较器来进行排序

public interface Comparator<T>{
    // 这个函数必须实现
    int compare(T o1,T o2);

    // 这个函数可以不用实现
    boolean equals(Object obj);
}

public class BookComparator implements Comparator<Book>{
    @override
    public int compare(Book b1,Book b2){
        return b1.getAge()- b2.getAge();
    }
}

public class Book{
    String name;
    int price;

    public Book(String name,int price){
        super();
        this.name=name;
        this.price=price;
    }
    public int getPrice(){
        return price;
    }
    public static void main(String[] args){
        Book[] allBook=new Book[]{new Book("math",3),new Book("java",16)};
        Arrays.sort(allBook,new BookComparator());
    }

}

总结

Comparable 是排序接口,只要类实现,该类就支持排序(内部排序)

Comparator 是比较器,控制某个类的次序,建立类的比较器来进行排序(外部比较器)

Comparator 是一种策略模式

lambda表达式

由匿名类逐渐简化实现 lambda表达式

将方法作为参数进行传递的编程方法

在函数运行过程中,lambda都会还原成匿名类方式。

引入lambda表达式,会使代码更加紧凑,而不是各种接口和匿名类到处都有

聚合操作

  • 1.stream 一系列元素,一串一串
  • 2.管道 一系列的聚合操作

管道

  • 管道源,类集,数组

类集 Collection.stream

数组 Arrays.stream(hs)

  • 中间操作 ,不会进行遍历(返回Stream)

filter 匹配

distinct 去重

sorted 排序

sorted(Comparator)

limit 保留

skip 忽略

mapToDouble 转换为double的流

map 转换为任意类型的流

  • 结束操作, 流使用完,最后一个操作,结束操作进行真正的遍历行为

forEach() 遍历每个数组

toArray() 转换为数组

min(Comparator) 取最小的元素

max(Comparator) 取最大的元素

count() 总数

findFirst() 第一个元素

get()

原文地址:https://www.cnblogs.com/GeekDanny/p/11736116.html

时间: 2024-10-12 01:29:03

比较接口(Comparable ,Comparator)及流的聚合操作的相关文章

Comparable接口与Comparator接口的比较————总结

之前的两篇文章主要学习了Comparable接口和Comparator接口的学习.既然已经学习完了,现在就趁热打铁,进行总结吧! Comparable接口和Comparator接口的共同点: 1. 都是为了进行排序.(废话,当然都是进行排序了!!!嘿嘿,大家都能看出来,不过还是写下来了!) 2. 都是接口.(额..又是废话) 除此之外,小编想不出还有什么共同点了!想到了其他的相同点可以在文章下方留言,大家一起学习! 相同点说完了,接下来就是不同点啦. Comparable接口与Comparato

Java6.0中Comparable接口与Comparator接口详解

Java6.0中Comparable接口与Comparator接口详解 说到现在,读者应该对Comparable接口有了大概的了解,但是为什么又要有一个Comparator接口呢?难道Java的开发者都吃饱撑着没事做吗? 再谈Comparator接口之前,大家应该先了解一个叫“策略模式”的东东.一下是百度百科对策略模式的描写: 策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换.策略模式让算法独立于使用它的客户而独立变化.(原文:The Strategy Pattern

Java之Comparable接口和Comparator接口

Comparable & Comparator 都是用来实现集合中元素的比较.排序的: Comparable 是在集合内部定义的方法实现的排序: Comparator 是在集合外部实现的排序: 所以,如想实现排序,就需要在集合外定义 Comparator 接口的方法或在集合内实现 Comparable 接口的方法. Comparator位于包java.util下,而Comparable位于包java.lang下 Comparable 是一个对象本身就已经支持自比较所需要实现的接口(如 Strin

java 中的2个接口 Comparable和Comparator

像Integer.String这些类型的数据都是已经实现Comparable接口的,所以对这些类型可以直接通过Arrays.sort(...)和Collections.sort(...)方法进行排序.但是对于一些自己new出来的对象而言,如果想使用sort这种方法,必须要实现Comparable接口,这是由sort方法底层决定的,具体看一下实例: 定义一个Bean public class Employee implements Comparable{ private int age;  pri

java中的排序Comparable接口和Comparator接口

普通的类要实现排序,必须实现Comparable接口,并重写CompareTo()方法. package test; public class Field implements Comparable<Field> {     private String name;     private int age;     public Field() {     }     public Field(String name, int age) {         this.name = name;

Java—集合框架 Collections.sort()、Comparable接口和Comparator接口

Collentions工具类--java.util.Collections Collentions是Java集合框架中,用来操作集合对象的工具类,也是Java集合框架的成员,与List.Map和Set是并列的. Collections.sort() 排序方法,实现对List对象中的元素进行排序. package com.test.collection; import java.util.ArrayList; import java.util.Collections; import java.ut

【Java基础】接口Comparable和Comparator的区别和关系

接口Comparable和Comparator的区别和关系 1).两者都是实现集合中元素的比较.排序: 2).Comparable是集合内部定义方法实现排序,Comparator是集合外部实现排序 3).Comparator接口在java.util下,Comparable接口在java.lang下; 通常自定义类加入如List等容器中能够排序,可以实现Comparable接口,在用Collections.sort(List<T> list, Comparator<? super T>

Comparable接口和Comparator接口

这两个接口经常容易混淆,不用的时候不清楚,用的时候就很容易出错,现摘抄网络上的一篇清楚的文章在此,便于日后查阅. 在实际应用中,我们往往有需要比较两个自定义对象大小的地方.而这些自定义对象的比较,就不像简单的整型数据那么简单,它们往往包含有许多的属性,我们一般都是根据这些属性对自定义对象进行比较的.所以Java中要比较对象的大小或者要对对象的集合进行排序,需要通过比较这些对象的某些属性的大小来确定它们之间的大小关系. 一般,Java中通过接口实现两个对象的比较,比较常用就是Comparable接

比较器:Compare接口与Comparator接口区别与理解

一.实现Compare接口与Comparator接口的类,都是为了对象实例数组排序的方便,因为可以直接调用 java.util.Arrays.sort(对象数组名称),可以自定义排序规则. 不同之处: 1 排序规则实现的方法不同 Comparable接口的方法:compareTo(Object o) Comparator接口的方法:compare(T o1, To2) 2 类设计前后不同 Comparable接口用于在类的设计中使用: Comparator接口用于类设计已经完成,还想排序(Arr