赞
踩
这是一个可以为null的容器对象,如果值存在则isPrresent()方法返回true,调用get()方法会返回该对象
- 作用:为非 null 的值创建一个 Optional。
- 说明:of 方法通过工厂方法创建 Optional 类。需要注意的是,创建对象时传入的参数不能为 null。如果传入参数为 null,则抛出 NullPointerException 。
public class Test1 {
public static void main(String[] args) {
//通过工厂模式创建实例
Optional<Stu> stu = Optional.of(new Stu());
//传入参数为 null,抛出 NullPointerException.
Optional<Object> o = Optional.of(null);
System.out.println(o);
System.out.println(stu);
}
}
作用:为指定的值创建一个 Optional,如果指定的值为 null,则返回一个空的 Optional。
说明:ofNullable 与 of 方法相似,唯一的区别是可以接受参数为 null 的情况。
public class Test1 {
public static void main(String[] args) {
Optional<Object> o = Optional.ofNullable(null);
System.out.println(o);
}
}
结果:
Optional.empty
作用:判断预期值是否存在
说明:如果值存在返回 true,否则返回 false。
public class Test1 {
public static void main(String[] args) {
Optional<Stu> stu = Optional.of(new Stu("张三", "23"));
Optional<String> s = Optional.of("");
//调用get()返回已存在的值
Stu stu2 = stu.get();
System.out.println(stu2.getAge() + stu2.getName());
System.out.println(s.isPresent());
System.out.println(stu.isPresent());
}
}
结果:
23张三
true
true
作用:如果 Optional 有值则将其返回,否则抛出 NoSuchElementException。
说明:上面的示例中,get 方法用来得到 Optional 实例中的值。
public class Test1 {
public static void main(String[] args) {
try {
Optional<String> s = Optional.of(null);
System.out.println(s.get());
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}
作用:如果 Optional 实例有值则为其调用 consumer,否则不做处理
说明:要理解 ifPresent 方法,首先需要了解 Consumer 类。简答地说,Consumer 类包含一个抽象方法。该抽象方法对传入的值进行处理,但没有返回值。Java8 支持不用接口直接通过 lambda 表达式传入参数,如果 Optional实例有值,调用 ifPresent()可以接受接口段或 lambda 表达式.
public class Test1 {
public static void main(String[] args) {
Optional<Stu> stu = Optional.of(new Stu("张三", "23"));
stu.ifPresent(new Consumer<Stu>() {
@Override
public void accept(Stu stu) {
System.out.println("你好呀");
}
});
System.out.println(stu.get().getName());
}
}
作用:如果有值则将其返回,否则返回指定的其它值。
说明:如果 Optional 实例有值则将其返回,否则返回 orElse 方法传入的参数。示例如下:
public class Test1 {
public static void main(String[] args) {
Optional<String> stu = Optional.ofNullable(null);
System.out.println(stu.orElse("为空"));
}
}
结果:
为空
作用:如果有值则将其返回,否则返回指定的其它值。
说明:orElseGet 与 orElse 方法类似,区别在于得到的默认值。orElse 方法将传入的字符串作为默认值,orElseGet方法可以接受 Supplier 接口的实现用来生成默认值
public class Test1 {
public static void main(String[] args) {
Optional<String> stu = Optional.ofNullable(null);
System.out.println(stu.orElseGet(() -> {
return "你好";
}));
}
}
结果:
你好
作用:如果有值则将其返回,否则抛出 supplier 接口创建的异常。
说明:在 orElseGet 方法中,我们传入一个 Supplier 接口。然而,在 orElseThrow 中我们可以传入一个 lambda表达式或方法,如果值不存在来抛出异常
public class Test1 { public static void main(String[] args) { Optional<String> stu = Optional.ofNullable(null); try { String s = stu.orElseThrow(new Supplier<Throwable>() { @Override public Throwable get() { return new Throwable("出现异常"); } }); } catch (Throwable throwable) { System.out.println(throwable.getMessage()); } } }
结果:
出现异常
作用:如果有值,则对其执行调用 mapping 函数得到返回值。如果返回值不为 null,则创建包含 mapping 返回值的 Optional 作为 map 方法返回值,否则返回空 Optional。
说明:map 方法用来对 Optional 实例的值执行一系列操作。通过一组实现了 Function 接口的lambda 表达式传入操作。
public static void main(String[] args) {
Optional<String> stu = Optional.ofNullable("hello world");
Optional<String> s = stu.map((value) -> value.toUpperCase());
System.out.println(s.orElse("scsdssd"));
}
}
结果:
HELLO WORLD
作用:如果有值,为其执行 mapping 函数返回 Optional 类型返回值,否则返回空 Optional。flatMap 与 map(Funtion)方法类似,区别在于 flatMap 中的 mapper 返回值必须是 Optional。调用结束时,flatMap 不会对结果用 Optional 封装。
说明:flatMap 方法与 map 方法类似,区别在于 mapping 函数的返回值不同。map 方法的 mapping 函数返回值可以是任何类型 T,而 flatMap 方法的 mapping 函数必须是 Optional。
public class Test1 {
public static void main(String[] args) {
Optional<String> stu = Optional.ofNullable("hello world");
Optional<String> s = stu.flatMap((value) -> Optional.of(value.toUpperCase()));
System.out.println(s.get());
}
}
结果:
HELLO WORLD
作用:如果有值并且满足断言条件返回包含该值的 Optional,否则返回空 Optional。
说明:filter 个方法通过传入限定条件对 Optional 实例的值进行过滤。这里可以传入一个 lambda 表达式。对于filter 函数我们应该传入实现了 Predicate 接口的 lambda 表达式。
public class Test1 {
public static void main(String[] args) {
Optional<String> stu = Optional.ofNullable("hello");
Optional<String> s = stu.filter((value) -> value.length() > 6);
System.out.println(s.orElse("字符串的长度没有超过6个"));
}
}
结果:
字符串的长度没有超过6个
此类包含用来操作数组(比如排序和搜索)的各种方法。此类还包含一个允许将数组作为列表来查看的静态工厂。 除非特别注明,否则如果指定数组引用为 null,则此类中的方法都会抛出 NullPointerException。
public class Test1 {
public static void main(String[] args) {
List<String> strings = Arrays.asList("张三", "李四", "王五");
Iterator<String> iterator = strings.iterator();
while (iterator.hasNext()){
System.out.println(iterator.next());
}
}
}
结果:
张三
李四
王五
public class Test1 {
public static void main(String[] args) {
int[] ints = new int[]{2,3,4,7};
System.out.println(Arrays.binarySearch(ints, 3));
}
}
结果:
1
public class Test1 {
public static void main(String[] args) {
int[] ints = new int[]{2,3,4,7};
int[] ints2 = Arrays.copyOf(ints, 4);
for(int i : ints2){
System.out.print(i + " ");
}
}
}
StringUtils 方法的操作对象是 Java.lang.String 类型的对象,是 JDK 提供的 String 类型操作方法的补充,并且是 null 安全的(即如果输入参数 String 为 null 则不会抛出 NullPointerException ,而是做了相应处理,例如,如果输入为 null 则返回也是 null 等,具体可以查看源代码)。
判断某字符串是否为空,为空的标准是 str==null 或 str.length()==0
判断某字符串是否为空或长度为0或由空白符(whitespace) 构成
去掉字符串两端的控制符(control characters, char <= 32) , 如果输入为 null 则返回null
去掉字符串两端的空白符(whitespace) ,如果输入为 null 则返回 null
返回字符串 searchStr 在字符串 str 中第 ordinal 次出现的位置。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。