Список в списке? - PullRequest
       2

Список в списке?

0 голосов
/ 15 мая 2019

У меня проблемы с моим приложением для Android. Надеюсь, что кто-то может помочь мне решить эту проблему.

У меня есть два списка. Один список с навыками и один список с сотрудниками .

Мне нужен список на Навыки со всеми сотрудниками , у которых есть навык .

Я думал об этом:

Список навыков с сотрудниками

Skill 1 -> (Employee1, Employee2 and Employee3)
Skill 2 -> (Employee2 and Employee3)
Skill 3 -> (Employee1, Employee4 and Employee5)

Есть кто-нибудь решение для меня, как я могу это сделать? Или, может быть, другие идеи сделать что-то подобное?

Мой результат должен быть таким: «Я хочу, чтобы все сотрудники с навыком 2»

Ответы [ 3 ]

2 голосов
/ 15 мая 2019

Чтобы расширить ответ Kkba, HashMap, вероятно, является вашим наилучшим способом организации ваших данных, если вы группируете подразделы сотрудников по навыкам.Поскольку каждый навык уникален, его можно использовать в качестве ключевой части HashMap, например, так:

HashMap<Skill, Employee> skillMap = new HashMap();

skillMap.put(firstSkill, Arrays.asList(employee1, employee3);
skillMap.put(secondSkill, Arrays.asList(employee2, employee3);
skillMap.put(thirdSkill, Arrays.asList(employee1, employee2, employee4);

А список сотрудников, использующих определенный навык, можно получить с помощью:

skillMap.get(firstSkill);   // Returns employee1 and employee3

Но имейте в виду, что get() возвращает null, если ключ не существует.Вместо этого вы можете использовать

skillmap.getOrDefault(emptySkill, Collections.emptyList());

, чтобы гарантировать, что List всегда возвращается независимо от наличия навыка.

Дальнейшее чтение: Arrays.asList(),HashMap.getOrDefault()

1 голос
/ 15 мая 2019

Я бы подошел к этому несколькими способами.Использование Map<Skill, List<Employee>> прекрасно, если вы не собираетесь изменять свою коллекцию.Однако, если вы сделаете это, добавление новых ключей и значений может быстро стать проблемой.

Имея это в виду, если вы хотите иметь изменяемый тип коллекции, я бы использовал некоторую форму MultiMap.Стандартный Java SDK не включает в себя реализацию, но вы можете найти ее достаточно легко в Интернете (прото-реализация присутствует в Java Documentation ) или поставляется через библиотеку (например, Guava's *).1008 *)

Либо создайте класс, который связывает навыки с сотрудниками, и отфильтруйте их коллекцию на основе предиката.Например:

class SkilledEmployee {
    private final Skill skill;
    private final Employee employee;

    SkilledEmployee(Skill skill, Employee employee) {
       this.skill = skill;
       this.employee  = employee;
    }

    Skill skill() {
        return skill;
    }

    Employee employee() {
        return employee;
    }
}

// To find employees by skill, using Java 8...

listOfSkilledEmployees.stream()
    .filter(se -> se.skill().equals(SKILL_ONE)) //Filter out employees with Skill1
    .map(SkilledEmployee::employee)
    .forEach(employeeWithSkillOne -> { /*Do something */});

0 голосов
/ 15 мая 2019
HashMap<String, ArrayList<String>>

"Skill1", ArrayList<"Employee1", "Employee2", "Employee3">
"Skill2", ArrayList<"Employee2", "Employee3">
"Skill3", ArrayList<"Employee1", "Employee4", "Employee5">
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...