我试图比较两个id,以获得ascii中较低的id。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。
提前谢谢。
如果您正在寻找嵌套对象的最小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")
如果只想要最低的ID,则不必为min
比较器使用任何特殊的lambda。您可以根据元素自己的compareTo
方法使用Comparator.naturalOrder()
来获得min
元素。
String minId = lowerSupplyDeliveryTerm.stream()
.map(dto -> dto.provider.nif)
.min(Comparator.naturalOrder()).get();