Muzammal Hussain
Muzammal Hussain

Reputation: 121

incompatible types required object found entry

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

Answers (1)

Eran
Eran

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

Related Questions