java8 Comparator升序降序排序

本文通过具体示例,展示了如何使用Java8的Stream API进行数据过滤和排序操作,包括如何筛选特定年份的交易记录并按交易额排序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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实战》,笔者增加了一种降序排序的实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值