簡體   English   中英

用Java獲取和修改集合中的對象

[英]Fetching and modifying an object in a set in Java

我的MyFinalSalad類包含以下元素:

AppleClass apple;
BananaClass banana;
PearClass pear;
List<SpicesClass> spices;

我已經equals實現,如2個MyFinalSalad對象是相等的,如果他們有相同的AppleClassBananaClassPearClass在他們的對象。

現在,我正在創建一set MyFinalSalad對象。

我有以下代碼:

MyFinalSalad mySalad = new MyFinalSalad(apple, banana, pear);
SpiceClass cinnamon = new SpiceClass("cinnamon");
if (mySet.contains(mySalad)) {
    // I want to fetch mySalad object in the set and add cinnamon to the list of spices
} else {
  List<SpiceClass> spices = new ArrayList<>();
  spices.add(cinnamon);
  mySalad.setSpices(spices);
  mySet.add(mySalad);
}

總之,如果mySalad已經存在於mySet中,添加spice對象名單spicesmySaladmySet ,否則添加mySaladmySet創建一個新的香料后list ,加入cinnamon它並插入列表mySalad

我的問題是,如果set已經具有mySalad並且我想在該對象的列表中添加新的香料,該如何實現?

https://stackoverflow.com/a/7283419/887235獲得以下信息:

mySet.stream().filter(mySalad::equals).findAny().orElse(null).getSpices().add(cinnamon);

這是唯一的方法還是正確的方法? 或者,還有更好的方法?

我在想, if已經執行了contains檢查,則將永遠不會遇到orElse(null) ,因為我已經輸入了。 因此null.getSpices()將永遠不會發生。 這個假設正確嗎?

有更好的方法嗎?

我無法將“ SetMap更改為。

您的假設是正確的。 orElse(null)永遠不會發生,因為您檢查集合contains是否contains沙拉。 您可以將其替換為get()

但是,我也要先使用isPresentget方法, isPresent其作為Optional進行處理。

Salad mySalad = new Salad();
Optional<Salad> possibleSalad = set.stream().filter(mySalad::equals).findAny();
if (possibleSalad.isPresent()) {
    Salad alreadyExistingSalad = possibleSalad.get();
    // combine spices
} else {
    // add new salad
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM