天天看點

java8 Comparator升序降序排序

package com.pilaf.stream;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.ToString;

import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;

/**
 * @description:
 * @author: pilaf
 * @create: 2019-10-09 20:56
 */
public class StreamApiDemo {

    public static void main(String[] args) {
        Trader raoul = new Trader("Raoul", "Cambridge");
        Trader mario = new Trader("Mario", "Milan");
        Trader alan = new Trader("Alan", "Cambridge");
        Trader brian = new Trader("Brain", "Cambridge");

        List<Transaction> transactions = Arrays.asList(
                new Transaction(brian, 2011, 300),
                new Transaction(raoul, 2012, 1000),
                new Transaction(raoul, 2011, 400),
                new Transaction(mario, 2012, 710),
                new Transaction(mario, 2012, 700),
                new Transaction(alan, 2012, 950)
        );

        //找出2011年發生的所有交易,并按交易額排序(從低到高)
        List<Transaction> transactions1 = transactions.stream()
                .filter(t -> t.getYear() == 2011)
                .sorted(Comparator.comparingInt(Transaction::getValue))
                .collect(Collectors.toList());
        System.out.println(transactions1);
        //找出2011年發生的所有交易,并按交易額排序(從低到高)
        List<Transaction> transactions2 = transactions.stream()
                .filter(t -> t.getYear() == 2011)
                .sorted(Comparator.comparing(Transaction::getValue))
                .collect(Collectors.toList());
        System.out.println(transactions2);
        //找出2011年發生的所有交易,并按交易額排序(從高到低)
        List<Transaction> transactions3 = transactions.stream()
                .filter(t -> t.getYear() == 2011)
                //Comparator.comparing預設是升序排序,用reversed改成降序
                .sorted(Comparator.comparing(Transaction::getValue).reversed())
                .collect(Collectors.toList());
        System.out.println(transactions3);
    }
}


/**
 * @description: 交易員
 * @author: pilaf
 * @create: 2019-10-09 20:52
 */
@AllArgsConstructor
@Data
@ToString
class Trader {

    private final String name;

    private final String city;
}


/**
 * @description: 交易
 * @author: pilaf
 * @create: 2019-10-09 20:53
 */
@Data
@AllArgsConstructor
@ToString
class Transaction {

    private final Trader trader;

    private final int year;

    private final int value;
}
           

main方法的輸出為:

[Transaction(trader=Trader(name=Brain, city=Cambridge), year=2011, value=300), Transaction(trader=Trader(name=Raoul, city=Cambridge), year=2011, value=400)]
[Transaction(trader=Trader(name=Brain, city=Cambridge), year=2011, value=300), Transaction(trader=Trader(name=Raoul, city=Cambridge), year=2011, value=400)]
[Transaction(trader=Trader(name=Raoul, city=Cambridge), year=2011, value=400), Transaction(trader=Trader(name=Brain, city=Cambridge), year=2011, value=300)]
           

示例代碼來自于《Java8實戰》,筆者增加了一種降序排序的實作。