[英]Returning a hashmap in a method with Optional return type
根據我的分配說明,我花了很多時間制作此代碼,以使用 HashMap 分配某個插槽值(當我在此方法之外測試代碼時,代碼按預期工作)。 但是我剛剛注意到,我必須在其中實現此代碼的方法是可選的(方法本身不能修改,但我可以添加其他方法)。
現在,如果我通過調用addAnOrder
添加訂單,我的整個代碼都會被忽略,因為我不知道如何實際返回為每個添加訂單創建的HashMap slots
的新添加值。 因此,對於我添加的每個訂單,我都從一個完全空的 HashMap 開始。
我的整個代碼現在都沒有用了嗎,因為我已經監督了這個細節? 指令 state,我這個方法的返回值必須是int givenSlot
,但是我如何為我的 HashMap 添加新值,所以在計算槽值時它們實際上被考慮在內?
public Optional<Integer> addAnOrder(Order order, int preferredSlot) {
HashMap<Integer, Integer> slots = new HashMap<Integer, Integer>();
int givenSlot = 0, count = 0;
if (currentDate.equals(date)) {
if (slots.size() < (numberOfTimeSlots + 1) * (capacityPerSlot + 1)) {
if (!slots.containsValue(preferredSlot)) {
givenSlot = preferredSlot;
slots.put(count, preferredSlot);
count++;
} else {
int valueCount = 0;
for (Integer value : slots.values()) {
if (value.equals(preferredSlot)) {
valueCount++;
}
}
if (valueCount <= capacityPerSlot) {
givenSlot = preferredSlot;
slots.put(count, preferredSlot);
count++;
} else {
int valuePlus = 0, valueMinus = 0, valueCount2 = 0, valueCount3 = 0, i = 1, j = 1;
boolean plus = false, minus = false;
for (int a = 1; preferredSlot + i < numberOfTimeSlots + 1; i++) {
valueCount2 = 0;
for (Integer value : slots.values()) {
if (value.equals(preferredSlot + i)) {
valueCount2++;
if (valueCount2 > capacityPerSlot) {
break;
}
}
}
if (valueCount2 <= capacityPerSlot) {
valuePlus = preferredSlot + i;
if (valueCount2 <= capacityPerSlot) {
plus = true;
}
break;
}
}
for (int b = 1; preferredSlot - j > -2; j++) {
valueCount3 = 0;
for (Integer value2 : slots.values()) {
if (value2.equals(preferredSlot - j)) {
valueCount3++;
if (valueCount3 > capacityPerSlot) {
break;
}
}
}
if (valueCount3 <= capacityPerSlot) {
valueMinus = preferredSlot - j;
if (valueCount3 <= capacityPerSlot) {
minus = true;
}
break;
}
}
if (plus == true && minus == true) {
if (Math.abs(preferredSlot - valuePlus) < Math.abs(preferredSlot - valueMinus)) {
givenSlot = preferredSlot + i;
slots.put(count, preferredSlot + i);
count++;
plus = false;
minus = false;
} else if (valueMinus >= 0) {
givenSlot = preferredSlot - j;
slots.put(count, preferredSlot - j);
count++;
plus = false;
minus = false;
} else {
givenSlot = preferredSlot + i;
slots.put(count, preferredSlot + i);
count++;
plus = false;
minus = false;
}
} else if (plus == true && minus == false) {
givenSlot = preferredSlot + i;
slots.put(count, preferredSlot + i);
count++;
plus = false;
} else if (minus == true && plus == false && valueMinus >= 0) {
givenSlot = preferredSlot - j;
slots.put(count, preferredSlot - j);
count++;
minus = false;
} else {
return Optional.empty();
}
return Optional.of(givenSlot);
}
return Optional.of(givenSlot);
}
return Optional.of(givenSlot);
}
return Optional.empty();
}
return Optional.empty();
}
我認為您可以添加 getSlotsMap() 方法來檢索 map,您將在應用程序初始化代碼中的某些位置對其進行初始化。
public Optional<Integer> addAnOrder(Order order, int preferredSlot){
HashMap<Integer, Integer> slots = getSlotsMap();
//do your thing
return Optional.empty();
}
public HashMap<Integer, Integer> getSlotsMap(){
//add logic to get the map from some object
return null;
}
編輯:根據 OP 作者的輸入修改了答案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.