Java Lambda Expression到Object中的UpperCase字符串值

时间:2017-04-17 17:51:37

标签: java lambda

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

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

然后我在方法中使用此运算符并传入Object,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。我遇到的问题是getters / setter不是静态的,如果没有它们的对象声明就不能引用。

1 个答案:

答案 0 :(得分:1)

您可以将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。