[英]Fetching and modifying an object in a set in Java
我的MyFinalSalad
類包含以下元素:
AppleClass apple;
BananaClass banana;
PearClass pear;
List<SpicesClass> spices;
我已經equals
實現,如2個MyFinalSalad
對象是相等的,如果他們有相同的AppleClass
, BananaClass
, PearClass
在他們的對象。
現在,我正在創建一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
對象名單spices
在mySalad
從mySet
,否則添加mySalad
到mySet
創建一個新的香料后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()
將永遠不會發生。 這個假設正確嗎?
有更好的方法嗎?
我無法將“ Set
為Map
更改為。
您的假設是正確的。 orElse(null)
永遠不會發生,因為您檢查集合contains
是否contains
沙拉。 您可以將其替換為get()
。
但是,我也要先使用isPresent
和get
方法, 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.