刚刚开始学习 Java 8,注意到了 Lamdas 和流式函数式编程。
想知道一个简单的命令行参数消费者是否可以使用流。
但无法弄清楚如何同时获取两个流元素... 再加上下面我需要处理接受和不接受值(value)观的参数,所以不能做任何奇数/偶数的诡计。会考虑 args 总是以破折号开头,而可选值永远不会。
String[] args = ("-v", "-c", "myconfigfile", "-o", "outputfile");
Arrays.toList(args).stream().map( a,v -> evalArg(a,v));
public static void evalArg(String arg, String val) {
switch(arg) {
case "-v":
verbose = true;
break;
case "-c":
config_file = val;
break;
case "-o":
output_file = val;
break;
default:
System.err.println("unknown argument " + arg + " " + val);
break;
}
}
最佳答案
如果您有键值对,那么您可以使用以下内容:
public static void main(final String[] args) {
String[] args = {"-v", "value", "-c", "myconfigfile", "-o", "outputfile"};
pairStream(Arrays.asList(args), (param, value) -> param + ": " + value)
.forEach(System.out::println);
}
public static <X, Y> Stream<Y> pairStream(List<X> list, BiFunction<X, X, Y> mapper) {
Supplier<X> s = list.iterator()::next;
return Stream.generate(() -> mapper.apply(s.get(), s.get()))
.limit(list.size() / 2);
}
// Result:
// -v: value
// -c: myconfigfile
// -o: outputfile
关于java - Java 8 流可以成对处理吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24642499/