С Новым годом! Форум программистов, компьютерный форум, киберфорум
Java
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/106: Рейтинг темы: голосов - 106, средняя оценка - 4.77
12 / 12 / 4
Регистрация: 13.10.2012
Сообщений: 279

Поиск полей в объекта в List

25.04.2013, 22:41. Показов 21722. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть коллекция List.В ней хранятся объекты юзеров. У юзера есть поля логин и пароль. Ввожу логин и пароль. Как проверить, хранится ли в коллекции объект с такими полями?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.04.2013, 22:41
Ответы с готовыми решениями:

Как выполнить поиск в List<> по свойству объекта?
Вот дана задача: Дан массив элементов типа сотрудник (обладает следующими свойствами – фамилия, имя, заработная плата). Вывести список...

Вывод в DataGridView полей некоторого экземпляра класса, в котором одно из полей является списком List
Здравствуйте, помогите плиз!!! Возникла потребность вывода в DataGridView полей некоторого экземпляра класса, в котором одно из полей...

Поиск в List<List<string>>: поиск по части строки
Здравствуйте. Надо реализовать поиск по части строки. Т.е. у меня есть List объектов List&lt;string&gt;, по введенной строке надо...

9
 Аватар для exiqa
487 / 333 / 71
Регистрация: 24.12.2011
Сообщений: 591
25.04.2013, 23:18
Java
1
2
3
4
5
6
7
for (User user : usersList) {
    String userLogin = user.getLogin();
    String userPassword = user.getPassword();
    if (login.equals(userLogin) && password.equals(userPassword)) {
        // Bingo!
    }
}
1
 Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
26.04.2013, 09:27
Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от exiqa Посмотреть сообщение
Java
1
2
3
4
5
6
7
for (User user : usersList) {
    String userLogin = user.getLogin();
    String userPassword = user.getPassword();
    if (login.equals(userLogin) && password.equals(userPassword)) {
        // Bingo!
    }
}
это выглядит конечно неплохо (хотя и смахивает на плохой дизайн), но можно и так:

Java
1
boolean userContains = userList.contains(new User(login, password)); // bingo
при условии что у вас переопределён правильно equals в классе User
ну и хорошо бы определять сразу сущность юзера со всеми его необходимыми полями и дальше в коллекциях уже работать с ним
а не потрошить на отдельные поля и мильёны ифов
4
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
26.04.2013, 15:49
Тоже решил попробовать
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
import java.util.*;
 
class User {
    private String firstName;
    private String secondName;
    private double growth;
    private double shoeSize;
    
    public User(String fn, String sn, double gt, double ss) {
        firstName = fn;
        secondName = sn;
        growth = gt;
        shoeSize = ss;
    }
    public User(String fn, String sn) {
        this(fn, sn, 0.0, 0.0);
    }
    public User() {
        this("Unknown", "Unknown");
    }
    
    @Override
    public boolean equals(Object o) {
        User another = (User)o;
        return ( firstName.compareTo(another.firstName) == 0 && secondName.compareTo(another.secondName) == 0 );
    }
    
    @Override
    public String toString() {
        String ret = "First name:\t" + firstName + "\nSecond name:\t" + secondName + "\nGrowth:\t\t" + growth + "\nShoe size:\t" + shoeSize + "\n";
        return ret;
    }
}
 
class TestUser {
    public static void main(String[] args) {
        List<User> list = new LinkedList<User>();
        
        list.add(new User("Вася", "Пупкин", 180, 46)); // Ну кудаже без него...
        list.add(new User("Зина", "Булавкина", 160, 36));
        list.add(new User("Вася", "Пупкин", 176, 44)); // Ба, ещё один!
        list.add(new User("Петя", "Баранкин", 178, 43));
        list.add(new User("Вася", "Пупкин", 175, 42)); // Да сколькож их?!
        list.add(new User("Элла", "Кацнальбоген")); // Ой, кто это?
        
        // А вот сейчас всех и поищем
        
        User wanted = new User("Вася", "Пупкин");
        
        /* Вот эта хитрая фигня зацикливается на i = 0; i = 1
        for ( int i = list.indexOf(wanted); i > -1; i = list.subList(i + 1, list.size()).indexOf(wanted) )
            System.out.println(i + ": " + list.get(i));
        */
        
        /* так работает */
        for ( User u : list )
            if ( u.equals(wanted) )
                System.out.println(u);
        
    }
}
0
 Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
26.04.2013, 15:56
easybudda, это хороший пример неправильного переопределения эквалса )
в сравнении обязаны участвовать все значащие поля иначе вы имеете проблемы и это только верх айсберга работы с коллекциями
0
 Аватар для AckiyBolt
653 / 402 / 35
Регистрация: 19.02.2013
Сообщений: 1,072
Записей в блоге: 2
26.04.2013, 16:11
Цитата Сообщение от mutagen Посмотреть сообщение
в сравнении обязаны участвовать все поля иначе вы имеете проблемы и это только верх айсберга работы с коллекциями
да ладно
0
 Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
26.04.2013, 16:11
Цитата Сообщение от AckiyBolt Посмотреть сообщение
да ладно
я уже профиксил на значимые )))
обязаны или нет - зависит от логики конешн
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
26.04.2013, 17:14
Цитата Сообщение от mutagen Посмотреть сообщение
это хороший пример неправильного переопределения эквалса
Да это ладно, для этого примера и так сойдёт.
Мне вот интереснее, почему эта чудо-конструкция
Цитата Сообщение от easybudda Посмотреть сообщение
for ( int i = list.indexOf(wanted); i > -1; i = list.subList(i + 1, list.size()).indexOf(wanted) )
не отрабатывает? По отдельности и indexOf() и subList() и та же equals() выдают то, что задумано, а вот так в цикле фигня какая-то получается...
0
 Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
26.04.2013, 17:26
Цитата Сообщение от easybudda Посмотреть сообщение
почему эта чудо-конструкция
видимо потому что вам нужен итератор из полученного сублиста, а не лазить по нему как по массиву

да и вообще непонятна задача сублиста в данном контексте
если вы хотите выхватить всех вантедов не лучше ли их фильтрануть в отдельную коллекцию?
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
26.04.2013, 17:42
Цитата Сообщение от mutagen Посмотреть сообщение
да и вообще непонятна задача сублиста в данном контексте
В С++ методы, возвращающие индекс чего-либо, как правило, позволяют указывать начальный индекс для поиска. Здесь же не найдя в indexOf() чего-либо похожего попробовал так сделать, по задумке казалось логичным...

Цитата Сообщение от mutagen Посмотреть сообщение
если вы хотите выхватить всех вантедов не лучше ли их фильтрануть в отдельную коллекцию?
Да ни минуты не сомневаюсь, что лучше! Одна беда - не знаю, как это делается...
В цикле по листу вот так все нашлись:
Java
1
2
3
        for ( User u : list )
            if ( u.equals(wanted) )
                System.out.println(u);
но сдаётся, что это не тру-вей, и Вы о чём-то другом говорите.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.04.2013, 17:42
Помогаю со студенческими работами здесь

Поиск данных полей по данным из других полей в форме
Приветствую уважаемые! Помогите пожалуйста мне решить следующую проблему. Я новичок в этом деле, деятельность заключается в другом, но...

Сортировка list по одному из полей
Помогите пожалуйста! У меня есть структура, содержащая несколько полей (типа int, char, char). Я считываю из 2-го файла в эту структуру,...

Перевод полей из таблицы MySQL в List
В общем задача такая: создать объект аналогичный таблицы, сетить туда поля из таблицы, сделать лист объектов и вывести этот лист. ...

Вывод полей наследников через foreach из List
Или не обязательно через foreach. Доброго дня! У меня все плохо с основами, потому кидайте, пожалуйста, свои помидоры. Вопрос в...

Вывод полей объектов из коллекции List в DataGridView
Помогите разобраться. Данные для вывода dataGridView1.DataSource я беру из коллекции List&lt;Класс1&gt;. Все нормально выводится. Я создаю...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru