首页 > 解决方案 > 比较两个 id 以获得较低的值

问题描述

我试图比较两个 id 以获得较低的 ascii。id 是字母数字的"836778436K""K8474874"...

我试过了

lowerSupplyDeliveryTerm.stream()
                       .map(dto -> dto.provider.nif)
                       .min(SupplyDto::provider.nif)

SupplyDto班级是

public class SupplyDto {
    public String id;
    public long version;

    public SupplierProviderDto provider = new SupplierProviderDto();
    public SuppliedSparePartDto sparePart = new SuppliedSparePartDto();

    public double price;
    public int deliveryTerm;

    public static class SupplierProviderDto {
        public String id;
        public String nif;
        public String name;

    }

    public static class SuppliedSparePartDto {
        public String id;
        public String code;
        public String description;

    }

}

问题是我不知道应该在 min 函数中引入哪个 lambda 函数来比较 dto 中提供程序的 nif。

提前致谢。

标签: javafunctional-programming

解决方案


如果您正在寻找最小ID的嵌套对象,您可以编写如下:

lowerSupplyDeliveryTerm.stream()
                       .map(dto -> dto.provider.nif)
                       .min(String::compareTo) // Optional<String> is returned here
                       .orElse("No minimal nif found")

如果您需要以最少的 nif 获取 DTO 的 ID:

lowerSupplyDeliveryTerm.stream()
                       .min(Comparator.comparing(dto -> dto.provider.inf))
                       .map(dto -> dto.provider.id)
                       .orElse("No ID for minimal nif found")


推荐阅读