1 public class OptionalDemo { 2 3 public static void main(String[] args) { 4 //创建Optional实例,也可以通过方法返回值得到。 5 Optional<String> name = Optional.of("Sanaulla"); 6 7 //创建没有值的Optional实例,例如值为'null' 8 Optional empty = Optional.ofNullable(null); 9 10 //isPresent方法用来检查Optional实例是否有值。 11 if (name.isPresent()) { 12 //调用get()返回Optional值。 13 System.out.println(name.get()); 14 } 15 16 try { 17 //在Optional实例上调用get()抛出NoSuchElementException。 18 System.out.println(empty.get()); 19 } catch (NoSuchElementException ex) { 20 System.out.println(ex.getMessage()); 21 } 22 23 //ifPresent方法接受lambda表达式参数。 24 //如果Optional值不为空,lambda表达式会处理并在其上执行操作。 25 name.ifPresent((value) -> { 26 System.out.println("The length of the value is: " + value.length()); 27 }); 28 29 //如果有值orElse方法会返回Optional实例,否则返回传入的错误信息。 30 System.out.println(empty.orElse("There is no value present!")); 31 System.out.println(name.orElse("There is some value!")); 32 33 //orElseGet与orElse类似,区别在于传入的默认值。 34 //orElseGet接受lambda表达式生成默认值。 35 System.out.println(empty.orElseGet(() -> "Default Value")); 36 System.out.println(name.orElseGet(() -> "Default Value")); 37 38 try { 39 //orElseThrow与orElse方法类似,区别在于返回值。 40 //orElseThrow抛出由传入的lambda表达式/方法生成异常。 41 empty.orElseThrow(ValueAbsentException::new); 42 } catch (Throwable ex) { 43 System.out.println(ex.getMessage()); 44 } 45 46 //map方法通过传入的lambda表达式修改Optonal实例默认值。 47 //lambda表达式返回值会包装为Optional实例。 48 Optional<String> upperName = name.map((value) -> value.toUpperCase()); 49 System.out.println(upperName.orElse("No value found")); 50 51 //flatMap与map(Funtion)非常相似,区别在于lambda表达式的返回值。 52 //map方法的lambda表达式返回值可以是任何类型,但是返回值会包装成Optional实例。 53 //但是flatMap方法的lambda返回值总是Optional类型。 54 upperName = name.flatMap((value) -> Optional.of(value.toUpperCase())); 55 System.out.println(upperName.orElse("No value found")); 56 57 //filter方法检查Optiona值是否满足给定条件。 58 //如果满足返回Optional实例值,否则返回空Optional。 59 Optional<String> longName = name.filter((value) -> value.length() > 6); 60 System.out.println(longName.orElse("The name is less than 6 characters")); 61 62 //另一个示例,Optional值不满足给定条件。 63 Optional<String> anotherName = Optional.of("Sana"); 64 Optional<String> shortName = anotherName.filter((value) -> value.length() > 6); 65 System.out.println(shortName.orElse("The name is less than 6 characters")); 66 67 } 68 69 }
Sanaulla No value present The length of the value is: 8 There is no value present! Sanaulla Default Value Sanaulla No value present in the Optional instance SANAULLA SANAULLA Sanaulla The name is less than 6 characters
原文链接: javacodegeeks 翻译: ImportNew.com - 高俊阳 译文链接: http://www.importnew.com/6675.html