2015-04-06 133 views
0
List<?> temp = empObjList.stream() 
        .filter(nestedDo -> nestedDo.getAttrib1() == "subject") 
        .collect(Collectors.toList()); 

这里我调用方法getAttrib1()。但是要调用的方法只能动态识别。我将仅以String值的形式获取函数的名称。我想动态地将其转换为函数。我知道我可以使用Reflections进行动态方法调用,但我无法通过反射来重写上述代码。在Java 8 Streams中调用动态函数

+7

嘿,你不觉得你需要改变'==“主题”'为'.equals(“subject”)'? – Turtle 2015-04-06 12:41:55

+0

如果“主题”是一个函数的名称,没有反思就无法做到。 – 2015-04-06 12:46:34

+3

我不确定你的目标究竟是什么,但我确定有更好的方法可以做到这一点,而不是将方法名称作为字符串传递,然后使用反射。你如何向我们展示更大的图片? – Philipp 2015-04-06 12:54:00

回答

8

我想你在找什么东西更像

List<?> temp = empObjList.stream().filter(this::processDo) 
        .collect(Collectors.toList()); 

哪里processDo(nestedDo)是不反射找出对做所谓的方法等。

+0

非常好,你有我的投票。 – 2015-04-06 12:48:07

+0

可以编写反射方法processDo的代码。 – 2015-04-06 12:50:13

+1

有很多关于如何通过名称使用反射来获取方法的示例。只需谷歌或在这里搜索。 – MadConan 2015-04-06 12:51:08