Java HashMap to Matrix - PullRequest
       19

Java HashMap to Matrix

2 голосов
/ 13 января 2010

Я столкнулся с проблемой. Я использовал следующий hashmap для хранения некоторых значений

HashMap<String, Object> hm = new HashMap<String, Object>();

Объект - это еще одна HashMap (да, вы можете сказать HashMap из HashMap). String предназначен для хранения названия книги, а Object снова является еще одним хэш-картой, в котором хранятся имя автора и количество авторов. Так что это может выглядеть так (книга Xyz {authname, numberOfAuthors}). Теперь я хочу напечатать этот hashmap в виде матрицы NxN. Есть ли какая-нибудь функция по умолчанию, которую я могу использовать для этого? Если нет, то кто-нибудь может подсказать мне, как сделать это легко? Потому что я не хочу использовать так много циклов и если условия (это убьет систему).

Спасибо!

Ответы [ 2 ]

3 голосов
/ 13 января 2010

Похоже, вы недостаточно использовали потенциал OO ... Вы можете создать свой собственный класс Book и переопределить toString() для печати всех полей ...

public class Book{
    private String bookName;
    private String authorName;
    ...
    @Override
    public String toString() {
        return String.format("%s written by %s",bookName,authorName);
    }
}

таким образом ваша библиотека будет выглядеть примерно так:

Map<String, Book> myLibrary = new HashMap<String, Book>(...);

и для печати всей вашей библиотеки вам понадобится простой цикл:

    for(Book b : myLibrary.values()) {
        System.out.println(b);
    }
2 голосов
/ 13 января 2010

Определенно нет встроенной функции для этого.

Первое, что вам нужно сделать, это выяснить уникальные ключи на карте второго уровня и назначить их столбцам. Может быть, вы уже знаете их (если они исправлены), в противном случае вам придется перебрать их все один раз и собрать их в набор.

Если у вас есть фиксированные ключи, вам следует рассмотреть вопрос об исключении карты второго уровня и использовании для этого класса бобов Java (книги).

Если вы действительно собираетесь печатать матрицу, вам нужно подумать о форматировании, в основном о ширине столбцов. Опять же, это также можно исправить априори, или вы можете посмотреть на данные (все или образец), чтобы выяснить это.

Игнорируя форматирование на мгновение, вы можете вывести что-то вроде CSV, а затем выполнить цикл карта (в идеале в порядке сортировки ключей) и выводить одну строку для каждой записи (книги). Затем в каждой строке вы должны перебрать столбцы (список ключей) и вывести каждое поле.

...