在Java中获取和修改集合中的对象
我有一个由以下元素组成的在Java中获取和修改集合中的对象,java,list,set,Java,List,Set,我有一个由以下元素组成的MyFinalSalad类: AppleClass apple; BananaClass banana; PearClass pear; List<SpicesClass> spices; 总而言之,如果mySalad已经存在于mySet中,请将spice对象添加到mySalad中spices的spices列表中的mySalad中,否则在创建新的spice列表后将mySalad添加到mySet,向其添加肉桂,并在mySalad中插入列表 我的问题是,如果se
MyFinalSalad
类:
AppleClass apple;
BananaClass banana;
PearClass pear;
List<SpicesClass> spices;
总而言之,如果mySalad
已经存在于mySet
中,请将spice
对象添加到mySalad
中spices
的spices
列表中的mySalad
中,否则在创建新的spice列表后将mySalad
添加到mySet
,向其添加肉桂
,并在mySalad
中插入列表
我的问题是,如果set已经有了mySalad
,我想在该对象的列表中添加一个新的香料,我该如何实现它
我从中得到以下信息:
mySet.stream().filter(mySalad::equals).findAny().orElse(null).getSpices().add(cinnamon);
这是唯一的方法还是正确的方法?还是有更好的办法
我在想,由于我已经在执行包含检查后输入如果,将永远不会遇到orElse(null)
。因此,null.getSpices()
将永远不会出现。这个假设正确吗
有更好的方法吗
我无法将Set
更改为Map
您的假设是正确的。orElse(null)
将永远不会发生,因为您要检查集合之前是否包含沙拉。您可以将其替换为get()
但是,我也会在前面进行一个级别的操作,并将其作为可选操作处理,利用isPresent
和get
方法
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
}
Salad mySalad=new Salad();
可选的possibleSalad=set.stream().filter(mySalad::equals).findAny();
if(可能是laad.isPresent()){
沙拉已存在沙拉=possiblesaad.get();
//混合香料
}否则{
//添加新沙拉
}
如同一个线程中所述,如果您的线程是NavigableSet,则只需通过Foo bar=set.floor(Foo)检索即可代码>然后执行操作
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
}