@dc65k

Как реализовать корректную структуру классов для добавления данных в коллекцию в Java?

Всем привет.
У меня есть задача, уже решенная на JavaScript:
const a = ['колба', 'кот', 'бокал', 'ток', 'тест', 'отк', 'тор', 'рот'];

function getAnagrams(s) {

    const m = new Map();

    for (let i of s) {
        // console.log(i);

        let w = i.split('').sort().join('');
        console.log(w);

        if (m.has(w)) {
            m.get(w).push(i);
        } else {
            m.set(w, []); // key => value
            m.get(w).push(i);
        }

    }
    console.log(m);
    /*
    Map {
      'абкло' => [ 'колба', 'бокал' ],
      'кот' => [ 'кот', 'ток', 'отк' ],
      'естт' => [ 'тест' ],
      'орт' => [ 'тор', 'рот' ] }
     */
    console.log('----------------------------------------');

    return Array.from(m.values()).filter(i => i.length > 1);
}

console.log(getAnagrams(a));
/*
[ [ 'колба', 'бокал' ],
  [ 'кот', 'ток', 'отк' ],
  [ 'тор', 'рот' ] ]
 */

// console.log(getAnagrams(['нос', 'сон', 'снедь', 'днесь']));


По аналогии я хочу переписать её на Java, но возникли сложности с организацией, когда, соответственно и с решением. Прошу строго не судить, не так давно начал изучать Java.
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class Test {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("нос");
        list.add("сон");
        list.add("снедь");
        list.add("днесь");
//        System.out.println(list);

        Anagrams anagrams = new Anagrams(list);

        System.out.println(anagrams.getAnagrams());
    }
}

class Words {
    public List<Word> words = new ArrayList<>();

    public Words(Word word) {
        this.words.add(word);
    }
}

class Word {
    private String word;

    public void setWord(String word) {
        this.word = word;
    }
}

class Anagrams {

    public List<String> words;

    public Anagrams(List<String> words) {
        this.words = words;
    }

    public boolean getAnagrams() {
        System.out.println(words);

        Map<String, String> map = new HashMap<>();

        for (int i = 0; i < words.size(); i++) {
//            System.out.println(words.get(i));

            String currentValue = words.get(i);

            String word = Stream.of(currentValue.split(""))
                    .sorted()
                    .collect(Collectors.joining());
            System.out.println(word);
            
            if (map.containsKey(word)) {

            } else {
//                map.put(word, );
            }

            System.out.println(map);
        }

        return true;
    }

}
  • Вопрос задан
  • 75 просмотров
Пригласить эксперта
Ответы на вопрос 1
zagayevskiy
@zagayevskiy Куратор тега Java
Android developer at Yandex
Классы Word и Words не нужны.
Вместо Map используй Set.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы