Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 8:流映射函数中的多个条件_Java_Java 8_Java Stream - Fatal编程技术网

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

Java 8:流映射函数中的多个条件,java,java-8,java-stream,Java,Java 8,Java Stream,如何在流的映射函数中使用多个条件?我是Java streams新手,实际上我想在流映射中使用多个条件,比如: 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 )

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

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 cs=Arrays.asList(“代理”、“经理”、“管理员”);
List replace=cs.stream()
.map(p->p.equals(“代理”)?“管理者”:p | p.equals(“管理者”)?“代理”:p)
.collect(Collectors.toList());
我想要的是用经理替换代理,用代理替换经理。如果列表中存在代理,则将其替换为管理器,如果存在管理器,则将其替换为代理。

您可以这样做

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

使用
列表执行此操作的另一种方法。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;
});
List cs=Arrays.asList(“代理”、“经理”、“管理员”);
cs.replaceAll(s->{
如果(s.equals(“经理”)){
返回“代理”;
}
如果(s.equals(“代理人”)){
返回“经理”;
}
返回s;
});
有关可读性,您可以检查此项

List cs=Arrays.asList(“代理”、“经理”、“管理员”);
List replace=cs.stream()
.map(p->{
如果(p.equals(“代理人”))
p=“经理”;
否则,如果(p.equals(“经理”))
p=“代理人;
返回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;
}

用于创建可读代码。

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

Map<String, String> replacements = Map.of("agent", "manager", "manager", "agent");

List<String> replace = cs.stream()
    .map(p -> replacements.getOrDefault(p, p))
    .collect(Collectors.toList());
Map replacements=Map.of(“代理”、“经理”、“经理”、“代理”);
List replace=cs.stream()
.map(p->replacements.getOrDefault(p,p))
.collect(Collectors.toList());

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

而且您的问题是:字符串不会使用
=
进行比较,而是使用
.equals
。为什么使用
映射
而不是
过滤器
?@HadiJ因为
映射
正是您在这里想要的,那么
fil呢ter
会有帮助吗?可能是基于观点,但出于某些原因,我发现Ravindra答案中的代码更具可读性。与
List<String> replace = cs.stream()
                .map(p -> p.equals("agent") ? "manager" : p.equals("manager") ? "agent" : p )
                .collect(Collectors.toList());
map(p -> {...})
Map<String, String> replacements = Map.of("agent", "manager", "manager", "agent");

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