gpt4 book ai didi

java - Java 中根据属性对对象数组进行排序

转载 作者:行者123 更新时间:2023-12-01 18:03:11 26 4
gpt4 key购买 nike

我正在尝试改进给定的选择 Storage 的算法框基于 Summary盒子上的信息。为了检索具有最高 numItems 属性(摘要对象)的标识符(摘要对象),我必须对 Summary[] 进行排序,一个对象数组,但我只是不知道如何按属性排序。

我发现了很多创建ArrayList<Int> a = new ArrayList<Int>();的例子然后使用Collections以获得最大值(value),但在这里,我对其他属性感兴趣,但我无法想象我将如何做到这一点。你能帮我吗?

public String selectNextDelivery(StorageBox.Summary[] summaries) throws NoBoxReadyException {
if (summaries.length != 0) {
for(StorageBox.Summary summary : summaries){
if (summary.numItems > 0) {
return summary.identifier;
}
}
}
// Otherwise no box is ready
throw new NoBoxReadyException();
}

最佳答案

在 Java 8 中,要使用属性获取对象数组中的最大元素,请使用 Stream#max()Comparator.comparingInt()

return Stream.of(summaries)
.max(Comparator.comparingInt(s -> s.numItems))
.orElseThrow(() -> new NoBoxReadyException())
.identifier;

如果没有 Java 8,您可以使用Collections.max()与定制Comparator :

try {
return Collections.max(Arrays.asList(summaries), new Comparator<StorageBox.Summary>() {
@Override
public int compare(StorageBox.Summary s1, StorageBox.Summary s2) {
return Integer.compare(s1.numItems, s2.numItems);
}
}).identifier;
} catch (NoSuchElementException nsee) {
throw new NoBoxReadyException();
}

或者您可以使用标准 for 循环自行实现:

if (summaries.length == 0)
throw new NoBoxReadyException();
StorageBox.Summary max = summaries[0];
for (int i = 1; i < summaries.length; i++)
if (summaries[i].numItems > max.numItems)
max = summaries[i];
return max.identifier;

关于java - Java 中根据属性对对象数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39071645/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com