如何使用 Stream API 从列表中获取具有最高值的 3 个对象

lop*_*kzz 0 java sorting list java-stream

我有一个这样的方法:

public String mostExpensiveItems() {
        List<Entry> myList = getList();
        List<Double> expensive = myList.stream()
                .map(Entry::getAmount)
                .sorted(Comparator.reverseOrder())
                .limit(3)
                .toList();

        return "";
    }
Run Code Online (Sandbox Code Playgroud)

此方法需要以字符串形式返回最昂贵商品的产品 ID ,如下所示:3

"item1, item2, item3"
Run Code Online (Sandbox Code Playgroud)

我应该只能使用流,但我被困在这里了。我应该能够按值对项目进行排序,然后获取产品 ID,但我似乎无法使其工作。

入门级

public class Entry {

    private String productId;
    private LocalDate date;
    private String state;
    private String category;
    private Double amount;

    public Entry(LocalDate orderDate, String state, String productId, String category, Double sales) {
        this.date = orderDate;
        this.productId = productId;
        this.state = state;
        this.category = category;
        this.amount = sales;
    }

    public String getProductId() {
        return productId;
    }
Run Code Online (Sandbox Code Playgroud)

Rik*_*yay 6

假设产品 ID 在 Entry 内,它可以是这样的。

public String mostExpensiveItems() {
    List<Entry> myList = getList();
    List<String> expensive = myList.stream()
            .sorted(Comparator.comparing(Entry::getAmount).reversed())
            .limit(3)
            .map(Entry::getProductID)
            .toList();

    return "";
}
Run Code Online (Sandbox Code Playgroud)

注意:我还没有测试过,但这应该能够传达这个想法。