orelse和orelseget区别
时间: 2023-04-13 21:03:01 浏览: 81
orelse和orelseget都是Python中的字典方法,用于获取字典中指定键的值。它们的区别在于:
- orelse方法只返回字典中指定键的值,如果该键不存在,则返回None。
- orelseget方法也返回字典中指定键的值,但如果该键不存在,则返回指定的默认值。
例如,假设有一个字典d = {'a': 1, 'b': 2},则:
- d.orelse('a')返回1
- d.orelse('c')返回None
- d.orelseget('a', 0)返回1
- d.orelseget('c', 0)返回0
相关问题
orelse,orElseGet,orElseThrow的区别和使用,详细讲解,举例子
在Java 8中,Optional类被引入来解决空指针异常。Optional是一个容器对象,它可能包含某个值或者不包含。使用Optional可以避免我们在if语句中进行null的判断。在Optional中,有三个方法:orElse,orElseGet和orElseThrow,它们的作用都是当Optional包含的值为空时,提供一个默认值。
1. orElse
orElse方法是Optional类中的一个方法,它的作用是在Optional包含的值为空时,提供一个默认值。如果Optional包含的值不为空,则返回该值。orElse方法的语法如下:
```
public T orElse(T other)
```
其中,other是一个T类型的对象,表示当Optional包含的值为空时,需要返回的默认值。orElse方法的返回值类型是T类型。
下面是一个例子:
```
Optional<String> optional = Optional.empty();
String result = optional.orElse("default");
System.out.println(result); //输出default
```
在这个例子中,Optional包含的值为空,所以使用了orElse方法提供了一个默认值"default"。
2. orElseGet
orElseGet方法也是Optional类中的一个方法,它的作用和orElse方法类似,都是在Optional包含的值为空时,提供一个默认值。但是orElseGet方法提供的默认值是通过一个Supplier对象来生成的,而不是直接提供的。如果Optional包含的值不为空,则返回该值。orElseGet方法的语法如下:
```
public T orElseGet(Supplier<? extends T> other)
```
其中,other是一个Supplier对象,它的get()方法返回一个T类型的对象,表示当Optional包含的值为空时,需要返回的默认值。orElseGet方法的返回值类型是T类型。
下面是一个例子:
```
Optional<String> optional = Optional.empty();
String result = optional.orElseGet(() -> "default");
System.out.println(result); //输出default
```
在这个例子中,Optional包含的值为空,所以使用了orElseGet方法提供了一个默认值"default"。
3. orElseThrow
orElseThrow方法也是Optional类中的一个方法,它的作用是在Optional包含的值为空时,抛出一个异常。如果Optional包含的值不为空,则返回该值。orElseThrow方法的语法如下:
```
public <X extends Throwable> T orElseThrow(Supplier<? extends X> exceptionSupplier) throws X
```
其中,exceptionSupplier是一个Supplier对象,它的get()方法返回一个X类型的异常对象,表示当Optional包含的值为空时,需要抛出的异常。orElseThrow方法的返回值类型是T类型。
下面是一个例子:
```
Optional<String> optional = Optional.empty();
try {
String result = optional.orElseThrow(() -> new Exception("Optional is empty"));
} catch (Exception e) {
e.printStackTrace();
}
```
在这个例子中,Optional包含的值为空,所以使用了orElseThrow方法抛出了一个异常。
总结:orElse、orElseGet和orElseThrow都是在Optional包含的值为空时,提供一个默认值。orElse提供的默认值是直接提供的,orElseGet提供的默认值是通过一个Supplier对象来生成的,orElseThrow抛出一个异常。
Optional中的orElse()和orElseGet()有什么区别
`orElse()` 和 `orElseGet()` 都是用于处理 `Optional` 对象为空的情况,提供一个备用值作为替代。它们之间的区别在于备用值的生成方式。
`orElse()` 方法在 `Optional` 对象为空时,会直接返回指定的备用值。无论 `Optional` 是否为空,备用值都会被计算。这意味着即使 `Optional` 中已经包含了一个非空的值,备用值也会被计算。
`orElseGet()` 方法在 `Optional` 对象为空时,会调用一个提供者函数来生成备用值。只有当 `Optional` 为空时,提供者函数才会被调用。如果 `Optional` 不为空,提供者函数不会执行。
以下是 `orElse()` 和 `orElseGet()` 方法的示例代码:
```java
import java.util.Optional;
public class OptionalExample {
public static void main(String[] args) {
Optional<String> optional1 = Optional.empty();
String value1 = optional1.orElse(getDefaultValue());
System.out.println(value1); // 输出:Default Value
Optional<String> optional2 = Optional.of("Hello");
String value2 = optional2.orElse(getDefaultValue());
System.out.println(value2); // 输出:Hello
Optional<String> optional3 = Optional.empty();
String value3 = optional3.orElseGet(() -> getDefaultValue());
System.out.println(value3); // 输出:Default Value
Optional<String> optional4 = Optional.of("Hello");
String value4 = optional4.orElseGet(() -> getDefaultValue());
System.out.println(value4); // 输出:Hello
}
public static String getDefaultValue() {
System.out.println("Generating default value...");
return "Default Value";
}
}
```
在上述代码中,我们创建了两个 `Optional` 对象 `optional1` 和 `optional2`,分别为空和包含字符串 "Hello"。然后,我们使用 `orElse()` 和 `orElseGet()` 方法获取备用值。
对于 `optional1`,`orElse()` 和 `orElseGet()` 都会返回备用值 "Default Value",因为 `optional1` 为空。对于 `optional2`,`orElse()` 方法不会调用提供者函数,而直接返回 `optional2` 中的值 "Hello"。而 `orElseGet()` 方法也不会调用提供者函数,因为 `optional2` 不为空。
输出:
```
Generating default value...
Default Value
Hello
Generating default value...
Default Value
Hello
```
从输出结果可以看出,`orElse()` 方法和 `orElseGet()` 方法都可以用来获取备用值,但是在备用值的生成方式上略有不同。如果备用值的计算代价较高,或者备用值是根据需要动态生成的,建议使用 `orElseGet()` 方法以避免不必要的计算。
相关推荐
![ppt](https://img-home.csdnimg.cn/images/20210720083527.png)
![txt](https://img-home.csdnimg.cn/images/20210720083642.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)