Java 8:流的映射功能中的多个条件

时间:2018-10-31 10:38:25

标签: java java-8 java-stream

如何在流的map函数中使用多个条件?我是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());

我要用代理替换代理,并用代理替换经理。就是说,如果列表中存在代理,则将其替换为manager;如果存在manager,则将其替换为agent。

6 个答案:

答案 0 :(得分:2)

您可以这样做

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

答案 1 :(得分:2)

使用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;
});

答案 2 :(得分:1)

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

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地图中即可。

答案 3 :(得分:0)

为了便于阅读,您可以对此进行检查

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());

答案 4 :(得分:0)

另一种方式是这样

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



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

答案 5 :(得分:0)

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

在这种情况下这将为您提供帮助,但是如果您需要更多的条件,请使用类似以下的身体样式

map(p -> {...})

用于创建可读代码。