所以我有 Reduce 功能:
public void reduce(Text key, Iterable<Text> values, Context context) throws IOException, InterruptedException {
for (Text value: values){
Matrix matrix = new Matrix(value.toString());
String name = matrix.get_name(); // Return "A" or "B"
context.write(key, new Text(name));
}
}
执行这段代码给了我类似的东西(这很有意义):
0,0 A
0,1 A
...
0,0 B
...
然后当我尝试切换&#34; name&#34;:
的值时public void reduce(Text key, Iterable<Text> values, Context context) throws IOException, InterruptedException {
for (Text value: values){
Matrix matrix = new Matrix(value.toString());
String name = matrix.get_name(); // Return "A" or "B"
switch (name){
case "A":
context.write(key, new Text("AA"));
break;
case "B":
context.write(key, new Text("BB"));
break;
default:
context.write(key, new Text("CC"));
break;
}
}
}
上面的代码给了我这个结果:
0,0 CC
0,1 CC
...
我不明白为什么我的switch语句在这种情况下有效(使用equals来比较也不起作用)
有什么指针可以解决这个问题吗?
我们将不胜感激。
//更新:
使用trim()和equalsIgnoreCase()也不起作用:
if ("A".equalsIgnoreCase(name.trim())){
context.write(key, new Text("AA"));
}
else if ("B".equalsIgnoreCase(name.trim())){
context.write(key, new Text("BB"));
}
else{
context.write(key, new Text("CC"));
}
答案 0 :(得分:1)
当然,不要使用switch语句比较字符串,按顺序使用trim()和equalsIgnoreCase()以及if else。
if(name.trim().equalsIgnoreCase("A"){...}
else if name.trim().equalsIgnoreCase("B"){...}
else ...