Java8 中的 UnaryOperator<T> 是一个函数式接口,它代表了一个接受一个参数并返回结果的操作。它接受一个类型为 T 的参数,并返回一个相同类型的结果。
该接口定义了一个名为 apply 的抽象方法,该方法接受一个参数并返回一个结果。在函数式编程中,可以使用该接口来表示一元操作,例如对一个值进行增加、减少、取反等操作。
UnaryOperator<T> 接口通常用于对集合中的元素进行操作,或者对某个对象的属性进行修改。它可以作为方法引用、Lambda 表达式、或者匿名类的实例来使用。
该接口是 java.util.function 包中的一部分,它提供了一系列用于函数式编程的函数式接口,可以方便地进行函数式编程的操作。在实际的开发中,可以使用 UnaryOperator<T> 来简化代码,提高可读性和可维护性。
UnaryOperator 函数式接口定义如下:
package java.util.function; /** * 表示对单个操作数进行操作,产生与其操作数类型相同的结果。 * 这是 Function 的特例,用于操作数和结果类型相同的情况。 * 这是一个函数接口,其函数方法是 apply(Object)。 * * @param <T> 操作数和运算结果的类型 * * @see Function * @since 1.8 */ @FunctionalInterface public interface UnaryOperator<T> extends Function<T, T> { /** * 返回一个一元操作符,该操作符始终返回其输入参数。 * * @param <T> 操作符的输入和输出类型 * @return 总是返回其输入参数的一元操作符 */ static <T> UnaryOperator<T> identity() { return t -> t; } }
该示例将对输入的字符串使用空格分隔,然后对调两个单词的位置。
package com.hxstrive.jdk8.function_interface; import java.util.function.UnaryOperator; /** * UnaryOperator 函数式接口 * @author hxstrive.com */ public class UnaryOperatorDemo { public static void main(String[] args) { UnaryOperator<String> unaryOperator = new UnaryOperator<String>() { @Override public String apply(String s) { String[] strs = s.split("\\s+"); return strs[1] + " " + strs[0]; } }; System.out.println(unaryOperator.apply("hello world")); } }
运行示例,输出如下:
world hello
package com.hxstrive.jdk8.function_interface; import java.util.function.UnaryOperator; /** * UnaryOperator 函数式接口 * @author hxstrive.com */ public class UnaryOperatorDemo2 { public static void main(String[] args) { UnaryOperator<String> unaryOperator = s -> { String[] strs = s.split("\\s+"); return strs[1] + " " + strs[0]; }; System.out.println(unaryOperator.apply("hello world")); } }
运行示例,输出如下:
world hello