Guava--アプリケーション(3)注文と例外処理Throwables

注文:Guavaによるコンパレータの拡張

         Javaでクラスのソートサイズを比較するには、内部コンパレータである同等のインターフェイスを実装するか、外部コンパレータであるComparatorを使用する必要があります。

 コピー可能なインターフェースを実装する本のクラスを定義する

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Book implements Comparable<Book> {
    
    private String bookName;
    private Double price;
    private String author;
    private Date createDate;

    @Override
    public int compareTo(Book b2) {
        return Double.compare(price,b2.getPrice());
    }
}

いくつかのコレクションを初期化します

    private List<Book> books;
    private List<String> strings;
    private List<Integer> integers;

    @Before
    public void initList() {
        books = Lists.newArrayList();
        books.add(new Book("java1234",9.9,"java",new Date()));
        books.add(new Book("python1234",10.9,"python",new Date()));
        books.add(new Book("scala1234",8.9,"scala",new Date()));
        books.add(new Book("c++1234",14.9,"c++",new Date()));
        integers = Lists.newArrayList(2, 9, 8, 1);
        strings = Lists.newArrayList("zhangsan", "lisi", "wangwu");
    }

コード例:

1.ビルドの順序

    Ordering.natural();

     Ordering.usingToString();

    Ordering.from(comparator);

    Ordering.compound(Iterable <comparator>)

        /**构建 ordering**/
//        natural,返回使用值的自然顺序进行比较的ordering实例
        Ordering<Comparable> natural = Ordering.natural();

//        usingToString, 返回对象的tostring后的字符串形式进行比较的ordering实例
        Ordering<Object> objectOrdering = Ordering.usingToString();

//         from, 返回基于现有的comarator 的ordering
        Ordering<Book> fromOrdering = Ordering.from(Comparator.comparing(Book::getAuthor));

//        compound, 返回带有多个比较器的排序规则,比如按照bookName排序,bookName相同的则按照price
        Ordering<Book> compound1 = Ordering.compound(Lists.newArrayList(
                Comparator.comparing(Book::getBookName),
                Comparator.comparing(Book::getPrice)));

2.順序付けとチェーン呼び出しのインスタンスメソッドは、複数の並べ替えルールを組み合わせます

    onResultOf(Function<F,? extends T> function)

       Ordering<Comparable> natural = Ordering.natural();
//        onResultOf ;排序前先应用一个function的结果 进行排序,下面就是按照bookName排序的,并么按照book
//        中自己实现的comparable的排序
        Ordering<Book> bookOrdering = natural.onResultOf(new Function<Book, Comparable>() {
            @Override
            public Comparable apply(@Nullable Book book) {
                return book.getBookName();
            }
        });
        List<Book> books = bookOrdering.sortedCopy(this.books);
       books.forEach(book -> System.out.println(book.getBookName() +" == " + book.getPrice()));
//       输出结果,按照名称排序
//        c++1234 == 9.9
//        java12345 == 10.9
//        java12345 == 9.9
//        scala1234 == 10.2

 他のインスタンスメソッド

 @Test
    public void testorderingSort() {
        Ordering<Comparable> natural = Ordering.natural();
//        max()最大
        System.out.println(natural.max(1, 3, 2)); //3
//        min()最小
        System.out.println(natural.min(1,5,0));  //0
//        leastOf(Iterable<E> iterable, int k)
//        返回k个最小元素,从小到大
        System.out.println(natural.leastOf(Lists.newArrayList(1,7,2,4,6,3),3)); // [1,2,3]
//        greatestOf(Iterable<E> iterable, int k)
//        返回k个组大元素,从大倒下
        System.out.println(natural.greatestOf(Lists.newArrayList(1,7,2,4,6,3),3)); // [7,6,4]
//        isOrdered(Iterable<? extends T> iterable), 判断是否是排好序的集合
        System.out.println(natural.isOrdered(Lists.newArrayList(1,23,2))); // false
//         nullsFirst(), 视为null为最小的
        System.out.println(natural.nullsFirst().min(null,1));  // null
//        nullsLast(),  是为null 为最大
        System.out.println(natural.nullsLast().max(null,1));   // null
//        reverse(), 反转排序
        System.out.println(natural.nullsLast().reverse().max(null,1));  // 1
//        sortedCopy, 返回一个拍好序的可变List
        natural.sortedCopy(Lists.newArrayList(1,2,5,4,3)).forEach(System.out::print); //12345

    }

 

スローアブル

 これはあまり使用されていません。次の1つを参照してください:http//ifeve.com/google-guava-throwables/

 

おすすめ

転載: blog.csdn.net/xiaodujava/article/details/99629411