我一直在努力将更多的函数式编程融入到我的工作中,因为我编写的代码的无副作用性质及其在并发代码中的实用性.我想要过滤掉java流的连续元素,并且无法提供比普通的旧命令方法更好的功能方法.假设我有一个记录其参数的程序,我想过滤掉2个连续的元素.例如,-o anOption, -k aSecretKeyWhoseValueWeShouldNotLog, -a anotherOption.我在日志中想要的是-o anOption, -a anotherOption.
我想出了几种方法,但是没有一种方法像使用for循环索引我需要过滤的东西一样可理解.
这似乎是一个相当普遍的想做的事情.是否存在使用java流或其他任何东西的模式,这种模式通常用于此类事情?
谢谢,
这就是我最终的结果.
static String filterSecretKeyOutOfCommandLineLogString(final String[] args) {
return joinArgsToString(filterOptionAndValueOutOfCommandLineLogString(SECRET_KEY, args));
}
private static String joinArgsToString(final String[] args) {
return Joiner.on(ARG_JOINER_DELIMITER).join(args);
}
private static String[] filterOptionAndValueOutOfCommandLineLogString(final Option option, final String[] args) {
final List<String> filteredList = new ArrayList<>();
final int numArgs = args.length;
for (int i = 0; i < numArgs; ++i) {
if (Arguments.matchesOption(option, args[i])) {
++i;
} else {
filteredList.add(args[i]);
}
}
return …Run Code Online (Sandbox Code Playgroud)