powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Поиск в коллекции по типу
11 сообщений из 11, страница 1 из 1
Поиск в коллекции по типу
    #39940714
GrossmasteR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уважаемый форумчане, здравствуйте. Нужен ваш совет.
Допустим у меня есть класс A и, к примеру, три его наследника: B, C и D.
Я создаю коллекцию, скажем ArrayList list, кладу туда list.put(new B()) кого-то или всех из наследников.
Вопрос, как мне проверить, что в коллекции содержатся все наследники? Именно не найти лишних, не убедиться, что все они наследники, а выяснить все ли из трех на месте или кого нет? Пожалуйста, подскажите
...
Рейтинг: 0 / 0
Поиск в коллекции по типу
    #39940719
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrossmasteR,
Циклом
...
Рейтинг: 0 / 0
Поиск в коллекции по типу
    #39940721
GrossmasteR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharp, а есть возможность поподробнее.
мне нужен какой-то contains по типу или instanceof наоборот что ли.
То есть допустим у меня есть, пусть будет, Arraylist list. Я туда положил, к примеру, только 1 из 3 наследников list.put(new B())
И потом я проверяю как-то A "instanceof наоборот" list.get(i) — false, а B "instanceof наоборот" list.get(i) — true и т.д. Итого двух таких то не хватает
...
Рейтинг: 0 / 0
Поиск в коллекции по типу
    #39940724
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrossmasteR
Уважаемый форумчане, здравствуйте. Нужен ваш совет.
Допустим у меня есть класс A и, к примеру, три его наследника: B, C и D.
Я создаю коллекцию, скажем ArrayList list, кладу туда list.put(new B()) кого-то или всех из наследников.
Вопрос, как мне проверить, что в коллекции содержатся все наследники? Именно не найти лишних, не убедиться, что все они наследники, а выяснить все ли из трех на месте или кого нет? Пожалуйста, подскажите


Правильный ответ такой - тебе надо не это, просто у тебя есть некая проблема которую ты тщательно скрываешь почему-то, придумал костыль чтобы его решить и будешь до последнего отпираться что это не так.
Использовать в одной коллекции объекты разных типов, пусть и наследников - это очень короткий путь прострелить себе ногу. Тебе надо понять что привело к этой ситуации и передизайнить систему, это единственный правильный вариант. Скорее всего ты скажешь - так задизайнено, не мое это дело, скажите просто как и т.д. - в таком случае ответ Petro самый разумный - цикл
...
Рейтинг: 0 / 0
Поиск в коллекции по типу
    #39940725
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что такое "instanceof наоборот' ?

Для меня, наоборот это поменять

A instanceof B
на
B instanceof A
...
Рейтинг: 0 / 0
Поиск в коллекции по типу
    #39940728
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrossmasteR
что все они наследники, а выяснить все ли из трех на месте или кого нет? Пожалуйста, подскажите


Циклом.

there_is_B boolean = false;
there_is_C boolean = false;
there_is_D boolean = false;
for ( )....
if ( there_is_B && there_is_C && there_is_D ) { return "OK"; } else { return ""; }
...
Рейтинг: 0 / 0
Поиск в коллекции по типу
    #39940731
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrossmasteR
instanceof наоборот"
)))
Возле компа?
Давай свой код. Че стеснятся.
...
Рейтинг: 0 / 0
Поиск в коллекции по типу
    #39940748
GrossmasteR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кода нет. Это учебная задача.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
public static void main(String[] args) {
        List<A> list = new ArrayList<>();
        list.add(new B());
        list.add(new C());
        list.add(new D());
        System.out.println(foo(list));
 
    }
 
    private static boolean foo(List<? extends A> list) {
        boolean isB = false, isC = false, isD = false;
        for (A a : list) {
            if (a instanceof B) isB = true;
            if (a instanceof C) isC = true;
            if (a instanceof D) isD = true;
        }
        return isB && isC && isD;
    }



Как узнать, какого именно наследника из B,C,D не хватает, если кого-то не хватает?
...
Рейтинг: 0 / 0
Поиск в коллекции по типу
    #39940767
Фотография fixxer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чему призвана научить эта задача и в каком виде изначально сформулирована?

В общем виде задача в java не решаема. Придется так или иначе знание о подклассах включать в код. Проще всего завести Set<Class<?>> subclasses и потом сравнивать с этим сетом свой лист. Алгоритм проходится на первом курсе в разделе "двумерные массивы".
...
Рейтинг: 0 / 0
Поиск в коллекции по типу
    #39940774
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrossmasteR
Кода нет. Это учебная задача.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
public static void main(String[] args) {
        List<A> list = new ArrayList<>();
        list.add(new B());
        list.add(new C());
        list.add(new D());
        System.out.println(foo(list));
 
    }
 
    private static boolean foo(List<? extends A> list) {
        boolean isB = false, isC = false, isD = false;
        for (A a : list) {
            if (a instanceof B) isB = true;
            if (a instanceof C) isC = true;
            if (a instanceof D) isD = true;
        }
        return isB && isC && isD;
    }



Как узнать, какого именно наследника из B,C,D не хватает, если кого-то не хватает?

В чем проблема?

if ( ! isB ) { System.out.println( "There is not B" ); }
if ( ! isC ) { System.out.println( "There is not C" ); }
if ( ! isD ) { System.out.println( "There is not D" ); }
...
Рейтинг: 0 / 0
Поиск в коллекции по типу
    #39940780
GrossmasteR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid Kudryavtsev, о, то что надо. Спасибо, спасибо большое
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Поиск в коллекции по типу
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]