标签:java lambda java-8 java-stream method-reference
有人可以帮我转换下面的代码来使用方法引用吗?我试图绕过这个新语法,但是当它变得比单个变量映射到单个方法调用更复杂时,我很快就会迷失:
getWorkspaces().stream().forEach((ws) -> {
DataStoreInfo defaultDataStore = getDefaultDataStore(ws);
if (defaultDataStore != null) {
other.setDefaultDataStore(ws, defaultDataStore);
}
});
我从这开始,但它不起作用:)
getWorkspaces().stream()
.map(this::getDefaultDataStore)
.filter(Objects::nonNull)
.map(other::setDefaultDataStore);
编辑:通过“它不起作用”,我的意思是IDE在“setDefaultDataStore”下的最后一行抱怨它无法解析该方法.我希望我能从一些有用的东西开始,但我不知道如何到达那里.我很困惑如何使用方法引用来调用一个带有2个参数的方法以及如何映射它.我已经转换了一些看起来像这样的代码:
getMaps().stream().forEach((m) -> {
other.add(m);
});
对此:
getMaps().forEach(other::add);
但是当它变得更复杂时我会迷失方向.我希望有一个明显的解决方案,如何使用方法引用编写相同的代码.
解决方法:
你可以将你的代码转换为这样的lambda版本,但它并不像预期的那样干净.
words.stream().map(ws -> new SimpleImmutableEntry<>(ws, getDefaultDataStore(ws)))
.filter(e -> e.getValue() != null)
.forEach(e -> setDefaultDataStore(e.getKey(), e.getValue()));
注意:e是进入的缩写.
标签:java,lambda,java-8,java-stream,method-reference 来源: https://codeday.me/bug/20190519/1134354.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。