如何在Java 8中的过滤器中设置值?我想将firstId为Raj的emailId设置为null。如何在Java8中做到这一点?
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.11/lodash.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.8.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.8.3/umd/react-dom.production.min.js"></script>
<div id='root'>
</div>
答案 0 :(得分:3)
Filter方法应返回boolean
,我认为应该没有任何副作用。在您的情况下,简单循环即可完成工作:
for(Employee employee: employees) {
if(e.getFirstName().equals("Raj")) {
e.setEmail(null);
}
}
但是如果您真的想使用流:
employees.stream() //get stream
.filter(e -> e.getFirstName().equals("Raj")) //filter entries with first name Raj
.forEach(e -> e.setEmail(null)); //for each of them set email to null
或(如果要处理整个列表并返回所有条目的更改,则:
employees.stream() //get stream
.map(e -> {
if(e.getFirstName().equals("Raj")) {
e.setEmail(null);
}
return e;
})
.collect(Collectors.toList());
答案 1 :(得分:2)
我们还可以使用 Collectors.mapping
来检查firstName
是否为Raj
,然后在其中将email
设置为null
映射函数(第一个参数),然后将其收集到新的List
(第二个参数)中:
employees.stream().collect(Collectors.mapping(emp -> {
if("Raj".equals(emp.getFirstName())) {
emp.setEmail(null);
}
return emp;
}, Collectors.toList()));
并且如nullpointer建议的那样,请勿使流中的对象突变。您可以使用副本构造函数来复制Employee
为firstName
的{{1}}的副本
并将Raj
属性设置为email
:
null
答案 2 :(得分:1)
另一方面,您可以将List.replaceAll
用作:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="https"
android:host="www.dropbox.com" />
<data android:scheme="https"
android:host="www.dropbox.com/oauth2/authorize" />
<!-- Oauth2 redirect url set when dropbox app is created -->
<data android:scheme="com.companyname.appname.oauth"
android:host="oauthredirect" />
</intent-filter>
答案 3 :(得分:0)
使用filter
中的map
和Java8
,您可以这样做:
employees.stream()
.filter(e -> e.getFirstName().equalsIgnoreCase("Raj"))
.map(e -> {
e.setEmail(null);
return e;
}).findAny();