在Java 8中,Stream该类没有任何方法来包装Iterable.
相反,我Spliterator从这里Iterable获得了,然后Stream从StreamSupport这样获得一个:
boolean parallel = true;
StreamSupport.stream(spliterator(), parallel)
.filter(Row::isEmpty)
.collect(Collectors.toList())
.forEach(this::deleteRow);
Run Code Online (Sandbox Code Playgroud)
是否有产生的一些其他的方式Stream上的操作Iterable,我很想念?
Groovy模板中的常规操作是将命名对象绑定到模板的范围,如下所示:
map.put("someObject",object)
template.bind(map)
Run Code Online (Sandbox Code Playgroud)
然后,在模板中我可以像这样引用并使用'someObject':
someObject.helloWorld()
someObject.helloWorld("Hi Everyone!")
someObject.helloWorld("Hi", "Everyone!")
Run Code Online (Sandbox Code Playgroud)
在模板内部,Groovy还允许我将方法句柄定义为模板中的第一类变量,如下所示:
someObject = someObject.&helloWorld
Run Code Online (Sandbox Code Playgroud)
然后,我可以在不参考对象和方法名称的情况下执行这些操作:
someObject()
someObject("Hello World")
someObject("Hello", "World")
Run Code Online (Sandbox Code Playgroud)
如何在'template.bind(map)'阶段绑定这样的方法引用以及自动解析脚本提供的所有参数组合,如'.&'运算符?
使用MethodClosure不起作用 - 这是一个简单的测试和我得到的错误
class TestMethodClass {
public void test() {
System.out.println("test()");
}
public void test(Object arg) {
System.out.println("test( " + arg + " )");
}
public void test(Object arg1, Object arg2) {
System.out.println("test( " + arg1 + ", " + arg2 + " )");
}
}
String basic = "<%" +
" def mc1=testInstance.&test;" +
"println \"mc1 class ${mc1.getClass()}\";" + …Run Code Online (Sandbox Code Playgroud) 根据StackOverflow-On Topic,这是一个特定的编程问题,一个软件算法,关于程序员常用的软件工具,它是一个实用的,可回答的问题,是软件开发所特有的.
...
我试图确定List在即将发布的Java 8中使用新的lambdas功能更改所有值的正确方法,而无需创建**new** List.
这适用于List调用者传入a并需要应用函数将所有内容更改为新值的时间.例如,该方式Collections.sort(list)就地更改列表.
给这个转换函数和这个起始列表最简单的方法是将函数应用于原始列表中的所有值而不创建新列表?
String function(String s){
return s.toUppercase(); // or something else more complex
}
List<String> list = Arrays.asList("Bob", "Steve", "Jim", "Arbby");
Run Code Online (Sandbox Code Playgroud)
将更改应用于所有值的常用方法是:
for (int i = 0; i < list.size(); i++) {
list.set(i, function( list.get(i) );
}
Run Code Online (Sandbox Code Playgroud)
lambdas和Java 8是否提供:
for(..)循环的所有脚手架?我正在尝试确定网络文件夹中是否存在文件:
// File name is "\\QWERTY\folder\dir\A123456.TXT"
Path path = Paths.get("\\\\QWERTY\\folder\\dir\\A123456.TXT")
Run Code Online (Sandbox Code Playgroud)
使用NIO Files:
Files.exists(path) == false
Run Code Online (Sandbox Code Playgroud)
使用File:
path.toFile().exists() == true
Run Code Online (Sandbox Code Playgroud)
File根据我们的测试,使用似乎是正确的.为什么File工作比Files?
那么,这是什么?不能两者兼得!
但是等等,还有Files.notExists(path).
当网络共享文件实际存在时
Files.exists(path): false
Files.notExists(path): false
path.toFile().exists(): true
Run Code Online (Sandbox Code Playgroud)
当网络共享文件实际上并不会存在
Files.exists(path): false
Files.notExists(path): true
path.toFile().exists(): false
Run Code Online (Sandbox Code Playgroud)
另一种同样疯狂的方式来看上面的三个结果
boolean exists = Files.exists(path) || !Files.notExists(path)
boolean notExists = Files.notExists(path) || !Files.exists(path)
boolean oldFashionedExists = path.toFile().exists()
Run Code Online (Sandbox Code Playgroud)
:smileyFace:
环境与评论
该程序在Windows 8.1 Pro 32位计算机(操作系统和计算机)上运行,并从Windows 2008 R2(32位)计算机检查网络共享.
为了确定Files.exists失败,我安装了一个WatchService来监视该文件夹,并在Files.exists检查时看到该文件确实存在.然后我记录了两个方法,发现File.exists是正确的.
现在,在我的代码中,我将检查为Files.exists(path) || path.toFile().exists().
有点必须做两件事似乎很愚蠢.可能只是逃脱后来.只是试图让工程师在甲骨文身上得到怀疑的好处,但整个事情是相当愚蠢的,他们报告的不同. …
使用新Java 8打印文件中所有行的最优选和简洁方法是什么?
输出必须是文件的副本,行的行如下:
[Line 1 ...]
[Line 2 ...]
Run Code Online (Sandbox Code Playgroud)
问题涉及带有lambdas的Java-8,即使在旧版本中有这样的方法.展示Java-8的全部内容!
使用Java 8,创建排序和分组的字符串列表的最简洁方法是什么?使用Lambdas和Collections and Streams框架显示旧方法和新方法.
您可以使用旧的(或新的)方式使用第三方库(流行的).
但是,我建议使用vanilla Java,因为它显示了Java 8中的语言更改带来的任务更改表.
Input: List<String>
Output: Map<Character<List<String>>
The key of map is 'A' to 'Z'
Each list in the map are sorted.
Run Code Online (Sandbox Code Playgroud)
它将被分类和分组,以便......
鉴于此列表:"啤酒","苹果","香蕉","凤梨","芒果","蓝莓"
甲Map意愿产生包含第一信作为密钥.地图中的值将List是以该键(字母)开头的所有单词的排序:
使用Java 8的新功能,转换a的所有值的最简洁方法是List<String>什么?
鉴于这种:
List<String> words = Arrays.asList("Apple", "Ananas", "Mango", "Banana", "Beer");
Run Code Online (Sandbox Code Playgroud)
我目前正在这样做:
for (int n = 0; n < words.size(); n++) {
words.set(n, words.get(n).toUpperCase());
}
Run Code Online (Sandbox Code Playgroud)
Java 8中的新Lambdas,Collections和Streams API如何帮助:
就地转换值(不创建新列表)
将值转换为新的结果列表.
正如问题所说,如何打包Netbeans Maven项目与Netbeans原生项目的打包方式完全相同:
哪里可以获得Java 8 jdk早期版本的tools.jar?没有它我在Netbeans中的Java 1.8 Maven pom项目将无法编译.
Java 8早期版本在Java平台设置中设置,并且所有非Maven的Java 8项目都将编译和运行.
https://jdk8.java.net/download.html
在下载页面上找不到它,我在搜索中找不到任何内容.
有没有人成功使用Java 8早期版本编译基于Maven pom的项目?可以使用旧的tools.jar或者你在哪里找到它?
缺少此版本tools.jar:jdk-8-ea-bin-b106-windows-i586-05_sep_2013.exe
它现在是最新版本.
即使我已经向以下尝试提供帮助的用户颁发奖金,但最初的问题仍未得到答复.没有实际可行的解决方案来确保在junit测试中遵守logback.groovy配置的日志记录.测试加载了logback配置,它确实报告了正确的级别,但实际的测试记录(仅通过slf4j)仍处于ANY或TRACE级别
我知道其他人遇到了同样的问题,并且由于控制台日志记录过于冗长,大型项目的测试需要花费更长时间才会非常烦人.我无法继续向这个问题投掷赏金.我希望有人提出一个很好的解决方案,允许通过系统属性在不同级别正确配置测试日志.然后,可以为项目创建不同的配置,以便可以在不同的日志记录阈值级别配置测试.
我的日志记录是通过logback.groovy文件进行logback配置的
现在,当我的Maven POM项目聚合所有其他项目时,它会传递所有System属性以设置正确的日志记录级别.
但是,当junit测试运行时,由于某种原因,即使测试类静态@beforeClass确保正确配置了logback,记录器也不会获取正确的级别.
测试中的记录器不是问题所在 - 嗯 - 是的 - 它们真正的问题是运行的代码段中的记录器(我所有程序记录器到处都是)被设置为错误的记录级别.在配置程序测试时,他们没有了解日志记录的内容.
但是,当logback使用logback.goovy文件初始化时,项目报告正确.但是,实际日志记录级别设置为TRACE或ALL
从下面的输出中可以看出,logback已配置为INFO.但TRACE(最后一行)的第一个项目日志声明表明没有被提取.
救命.
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running groovy.text.StreamingTemplateEngineTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.245 sec
Running net.abcd.templating.InlinerTest
01:22:15,265 |-INFO in ch.qos.logback.classic.gaffer.ConfigurationDelegate@1e8c3cb - Added status listener of type [ch.qos.logback.core.status.OnConsoleStatusListener]
01:22:15,290 |-INFO in ch.qos.logback.classic.gaffer.ConfigurationDelegate@1e8c3cb - Setting ReconfigureOnChangeFilter scanning period to 5 minutes
01:22:15,290 |-INFO in ReconfigureOnChangeFilter{invocationCounter=0} - Will scan for changes in [[C:\Users\ABDC\Dropbox\workspace\abcd\AbcdTemplating\conf\logback.groovy]] every 300 seconds.
01:22:15,290 |-INFO …Run Code Online (Sandbox Code Playgroud)