java - Java 8 流可以成对处理吗

标签 java java-8 java-stream

刚刚开始学习 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/

相关文章:

java - 如何从(内部)https 页面抓取 html 内容

java - 这个例子使用 Java 8 中的流 api 是否与 for 循环相同?

java - request.getParameter并验证图片

java - java中的构造函数引用是一种动态绑定(bind)吗?

java - Hibernate Timestamp 到 LocalDateTime 的转换意外结果

Java泛型和基类

java - 如何在java 8中展平列表

scala - Scala 与 Java 8 中的折叠操作

java - 如何在freemarker模板中调用反射方法?

java - JAR 中不会显示启动画面