Java 8:流映射函数中的多个条件



如何在流的映射函数中使用多个条件?我是Java流的新手,实际上我想在流映射中使用多个条件,比如:

List<String> cs = Arrays.asList("agent", "manager", "admin");
List<String> replace = cs.stream()
.map(p -> p.equals("agent") ? "manager" : p || p.equals("manager") ? "agent" : p )
.collect(Collectors.toList());

我想要的是用经理代替代理人,用代理人代替经理。也就是说,如果列表中存在代理,则用管理器替换它,如果存在管理器,则用代理替换它。

你可以这样做,

List<String> interchanged = cs.stream()
.map(s -> s.equals("manager") ? "agent" : s.equals("agent") ? "manager" : s)
.collect(Collectors.toList());

使用List.replaceAll的另一种方法可以是:

List<String> cs = Arrays.asList("agent", "manager", "admin");
cs.replaceAll(s -> {
if (s.equals("manager")) {
return "agent";
}
if (s.equals("agent")) {
return "manager";
}
return s;
});

其他答案显示了如何处理两个替换元素的选项。这里有一个更通用的方法:

Map<String, String> replacements = Map.of("agent", "manager", "manager", "agent");
List<String> replace = cs.stream()
.map(p -> replacements.getOrDefault(p, p))
.collect(Collectors.toList());

如果有更多的单词需要替换,只需将它们添加到replacements映射中即可。

List<String> replace = cs.stream()
.map(p -> p.equals("agent") ? "manager" : p.equals("manager") ? "agent" : p )
.collect(Collectors.toList());

这将在这种情况下对你有所帮助,但如果你需要更多的条件,请使用像这样的身体风格smth

map(p -> {...})

用于创建可读代码。

为了可读性,您可以检查这个

List<String> cs = Arrays.asList("agent", "manager", "admin");
List<String> replace = cs.stream()
.map(p -> { 
if(p.equals("agent"))
p = "manager"; 
else if(p.equals("manager"))
p = "agent; 
return p;
})
.collect(Collectors.toList());

另一种方式如下:

cs.replaceAll(s->s.replaceAll("agent|manager",replace(s)));

String replace(String s){
return s.equals("manager")?"agent" :s.equals("agent")?"manager": s;
}

最新更新