Boolean tmp;//临时变量,用来满足lambda表达式的要求 switch (type) { case "change": tmp= signal ? change.add(uniqueId) : change.remove(uniqueId); break; case "call": tmp= signal ? call.add(uniqueId) : call.remove(uniqueId); break; case "help": tmp= signal ? help.add(uniqueId) : help.remove(uniqueId); break; default: break; }怎么优化
时间: 2023-06-23 09:08:13 浏览: 45
在这段代码中,可以使用Java 8引入的Optional类来避免使用临时变量。同时,可以将重复的代码提取出来,使代码更加简洁。具体实现如下:
```
Optional<Set<String>> setOptional = Optional.empty();
switch (type) {
case "change":
setOptional = Optional.of(change);
break;
case "call":
setOptional = Optional.of(call);
break;
case "help":
setOptional = Optional.of(help);
break;
default:
break;
}
setOptional.ifPresent(set -> {
if (signal) {
set.add(uniqueId);
} else {
set.remove(uniqueId);
}
});
```
这段代码中,首先使用Optional类创建一个空对象,然后根据type的值,将对应的Set对象封装到Optional中。接着,使用ifPresent方法来检查Optional对象中是否存在Set对象,如果存在,则对Set对象进行操作。这样可以避免使用临时变量,并且代码更加简洁易读。
相关问题
boolean a = true?false:true ==true?false:true;为什么是false
这个表达式的值是false。这是因为Java中的三元运算符 ?: 的优先级是比 == 运算符低的,所以表达式可以分解为:
```
boolean a = (true ? false : true) == (true ? false : true);
```
在三元运算符的条件中,true ? false : true 的结果是false,并且两个条件都是相同的,所以整个表达式的值是false。
Optional<Set<String>> typeOptional = Optional.empty(); switch (type) { case "change": typeOptional = Optional.of(change); break; case "call": typeOptional = Optional.of(call); break; case "help": typeOptional = Optional.of(help); break; default: break; } //如果是true,就添加,如果是false,就删除 typeOptional.ifPresent(set -> { if (signal) { set.add(uniqueId); } else { if(set.contains(uniqueId)){ set.remove(uniqueId); } } });提炼出公共方法
可以将上述代码提取为一个公共方法如下:
```
public void addToSetOrRemoveFromSet(String type, Set<String> set, String uniqueId, boolean signal) {
Optional<Set<String>> typeOptional = Optional.empty();
switch (type) {
case "change":
typeOptional = Optional.of(change);
break;
case "call":
typeOptional = Optional.of(call);
break;
case "help":
typeOptional = Optional.of(help);
break;
default:
break;
}
typeOptional.ifPresent(typeSet -> {
if (signal) {
typeSet.add(uniqueId);
} else {
if (typeSet.contains(uniqueId)) {
typeSet.remove(uniqueId);
}
}
});
}
```
这个方法接受四个参数,分别是 `type` 表示类型,`set` 表示要操作的集合,`uniqueId` 表示要添加或删除的元素,`signal` 表示添加或删除操作。可以根据具体的业务需求调用这个方法。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://img-home.csdnimg.cn/images/20210720083646.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)