Reputation: 121
I want to print all permutations of string without recursion. It Generates an error incompatible types required object found entry at for (Entry chr1 : firstMap.entrySet())
and for (Entry chr2 : secondMap.entrySet())
. How can I solve this please Help !
public static List genPermutation(String input) {
Map firstMap = new LinkedHashMap();
Map secondMap = new LinkedHashMap();
List output = new ArrayList();
char[] chr = input.toCharArray();
for (int i = 0; i < chr.length; i++) {
firstMap.put(Character.valueOf(chr[i]), String.valueOf(chr[i]));
secondMap.put(Character.valueOf(chr[i]), String.valueOf(chr[i]));
}
for (Entry chr1 : firstMap.entrySet()) {
for (Entry chr2 : secondMap.entrySet()) {
if (chr1.getValue().equals(chr2.getValue())) {
output.add(String.valueOf(chr1.getValue()));
} else {
output.add(String.valueOf(chr1.getValue())
+ String.valueOf(chr2.getValue()));
}
}
}
return output;
}
Upvotes: 2
Views: 353
Reputation: 393801
Since firstMap
's type is a raw Map
, firstMap.entrySet()
returns a raw Set
, whose elements are of type Object
, not Entry
.
Use parameterized types instead of raw types:
public static List<String> genPermutation(String input) {
Map<Character,String> firstMap = new LinkedHashMap<>();
Map<Character,String> secondMap = new LinkedHashMap<>();
List<String> output = new ArrayList<>();
char[] chr = input.toCharArray();
for (int i = 0; i < chr.length; i++) {
firstMap.put(Character.valueOf(chr[i]), String.valueOf(chr[i]));
secondMap.put(Character.valueOf(chr[i]), String.valueOf(chr[i]));
}
for (Map.Entry<Character,String> chr1 : firstMap.entrySet()) {
for (Map.Entry<Character,String> chr2 : secondMap.entrySet()) {
if (chr1.getValue().equals(chr2.getValue())) {
output.add(String.valueOf(chr1.getValue()));
} else {
output.add(String.valueOf(chr1.getValue())
+ String.valueOf(chr2.getValue()));
}
}
}
return output;
}
Upvotes: 1