您可以使用一招。
訣竅是通過鍵將減速器以這樣的方式即,上述(a,d)和(d,α)具有相同的密鑰,並在同一減速結束:
當(一,d)來自:
'a' < 'd', hence emit:
key => a,d
value => a,d
當(d,α)來了:總是形成
'd' > 'a', hence emit:
key => a,d
value => d,a
鍵以這樣的方式,較低的字母而來的較高的字母之前。所以對於這兩種記錄,關鍵是「一,d」
所以映射器的輸出將是:
Record: a,b
Key = a,b Value = a,b
Record: a,c
Key = a,c Value = a,c
Record: a,d
Key = a,d Value = a,d
Record: c,b
Key = b,c Value = c,b
Record: b,d
Key = b,d Value = b,d
Record: d,a
Key = a,d Value = d,a
Record: b,c
Key = b,c Value = b,c
Record: b,e
Key = b,e Value = b,e
Record: e,f
Key = e,f Value = e,f
現在,在減速中的記錄將按照以下順序到達:
Record 1:
Key = a,b Value = a,b
Record 2:
Key = a,c Value = a,c
Record 3:
Key = a,d Value = a,d
Key = a,d Value = d,a
Record 4:
Key = b,c Value = c,b
Key = b,c Value = b,c
Record 5:
Key = b,d Value = b,d
Record 6:
Key = b,e Value = b,e
Record 7:
Key = e,f Value = e,f
因此,在減速機,你可以解析記錄3和4:
Record 3:
Key = a,d Value = a,d
Key = a,d Value = d,a
Record 4:
Key = b,c Value = c,b
Key = b,c Value = b,c
因此,輸出將是:
a,d
c,b
這個邏輯會的工作,即使你有名字的,而不是字母。 例如你需要使用下面的邏輯在映射器側(其中S1是第一個字符串和s2是第二個字符串):
String key = "";
int compare = s1.compareToIgnoreCase(s2);
if(compare >= 0)
key = s1 + "," + s2;
else
key = s2 + "," + s1;
所以,如果您有:
String s1 = "Stack";
String s2 = "Overflow";
的關鍵是:
Stack,Overflow
同樣,如果您有:
s1 = "Overflow";
s2 = "Stack";
仍然,關鍵將是:
Stack,Overflow
大@Manjunath。最佳答案.. – Thanga
我如何實現它,如果我有一些名稱,而不是字母? @manjunath –
它會工作相同。只需要根據字母命令名稱。 –