我有几个字符串值,根据该字符串我需要下载几个文件。在java8中这样做最有效的方法是什么。
List<String> keyValues = Arrays.asList("key1", "key2", "key3","key4");
keyValues.stream().forEach(i -> (FileUtils.copyURLToFile(new URL(urlStr + i), new File(filePath + i))) );
forEach给出错误,因为“不适用于参数((i) - &gt; {})”
非常感谢任何帮助。感谢。
答案 0 :(得分:2)
从lambda周围删除括号:
keyValues.forEach(i -> FileUtils.copyURLToFile(new URL(urlStr + i), new File(filePath + i)));
我的猜测是调用周围的括号让编译器误以为你有一个函数而不是消费者。
另请注意,您无需拨打stream()
;您可以直接从集合中调用.forEach()
。
答案 1 :(得分:0)
它很有趣,但是将一行放入函数并从lambda调用该函数工作正常。请参阅博客:http://blog.agiledeveloper.com/2015/06/lambdas-are-glue-code.html
operatorKeys.forEach(i -> downloadFile(i));
显然环绕着适当的尝试/捕获bloacks ..