public <T> Optional<T> supplier(Object t,List<String> methodNames) { Class clazz = t.getClass(); Optional<Method> om = streamMethod.computeIfAbsent( clazz, c -> Stream.of(c.getMethods()) .filter(method -> methodNames.contains(method.getName())) .filter(method -> method.getParameterCount() == 0) .findFirst().map(m2 -> { m2.setAccessible(true); return m2; })); if (!om.isPresent()) return Optional.empty(); Method m = om.get(); return Optional.of( (T)executeMethod( m,t)); }
public Optional<Stream> stream(Object t) { Class clazz = t.getClass(); Optional<Method> om = streamMethod.computeIfAbsent( clazz, c -> Stream.of(c.getMethods()) .filter(method -> "stream".equals(method.getName()) || "toStream".equals(method.getName())) .filter(method -> method.getParameterCount() == 0) .findFirst().map(m2 -> { m2.setAccessible(true); return m2; })); if (!om.isPresent()) return Optional.empty(); Method m = om.get(); return Optional.of((Stream) executeMethod( m,t)); } public <T> Optional<T> execute(List<String> methodNames, Object obj, Object... args){
public <T> Optional<T> execute(String methodName,Object obj,Object... args) { Class clazz = obj.getClass(); Map<Class, List<Method>> methods = generalMethods.computeIfAbsent(methodName, k->new ConcurrentHashMap<>()); List<Method> om = methods.computeIfAbsent( clazz, c -> Stream.of(c.getMethods()) .filter(method -> methodName.equals(method.getName())) .filter(method -> method.getParameterCount() == args.length) .map(m2 -> { m2.setAccessible(true); return m2; }).collect(Collectors.toList())); if(om.size()>0){ return Optional.of((T)executeMethod( om.get(0),obj,args)); } return Optional.empty(); } public <T> Optional<T> supplier(Object t,List<String> methodNames) {