对象中大写字符串值的 Java Lambda 表达式

标签 java lambda

我有一个 lambda 表达式,其中我使用 UnaryOperator 将字符串值转换为大写(如果不为空):

public static final UnaryOperator toUpperCase
    = (str -> str == null ? str : str.toString().toUpperCase());

然后我在方法中使用此运算符并传入对象、getter 和 setter。使用这些参数,我可以获得对象(字符串),将字符串大写,然后将字符串设置为值:

 public static final void convertToUpper(Object1 object1, Function<Object1, String> getter,
         BiConsumer<Object1, String> setter) { 
     setter.accept(object1, toUpperCase.apply(getter.apply(object1)).toString()); 
 }

但是,对于我想要进行此转换的每个对象,我都必须创建另一个具有不同对象参数的 convertToUpper 方法。有没有办法让这个方法更通用,并允许传入任何对象、getter 和 setter。我遇到的问题是 getter/setter 不是静态的,没有对象声明就不能引用。

最佳答案

您可以使 convertToUpper 成为通用方法:

public static final <T> void convertToUpper(T object1, Function<? super T, String> getter,
        BiConsumer<? super T, String> setter) {
    setter.accept(object1, toUpperCase.apply(getter.apply(object1)).toString());
}

您可以传入任何对象、getter 和 setter,只要该 getter 和 setter 可以应用于该类型的对象即可。

关于对象中大写字符串值的 Java Lambda 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43456657/

相关文章:

java - 在 Java 中使用 lambda 表达式有什么运行时好处吗?

java - 将 2 个集合转换为 Map

c# - 如何在 lambda 表达式中定义为 LINQ Select 方法中的另一个函数

c# - 我能否以某种方式评估表达式以确定并可能设置为 null 的属性?

c++ - 如何通过 C API 传递带捕获的 std::function?

java - actionscript 'Number' 是否类似于 Java 'double'?

java - Android GridLayout 不显示

java - 从 chrome developer studio 触发一个事件

java - 方法编译并使用传递的错误类型的变量

c++ - 关于 lambda、函数指针的转换和私有(private)数据成员的可见性