Форум программистов, компьютерный форум, киберфорум
Java
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.64/78: Рейтинг темы: голосов - 78, средняя оценка - 4.64
11 / 11 / 4
Регистрация: 13.10.2012
Сообщений: 279
1

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

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

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

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

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

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

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

__________________

Записывайтесь на профессиональные курсы Java-разработчиков
Обучение в Java Mentor с оплатой после трудоустройства
9
487 / 333 / 71
Регистрация: 24.12.2011
Сообщений: 591
25.04.2013, 23:18 2
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
2580 / 2253 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
26.04.2013, 09:27 3
Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от 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Эксперт С++
10910 / 6836 / 1625
Регистрация: 25.07.2009
Сообщений: 12,540
26.04.2013, 15:49 4
Тоже решил попробовать
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
2580 / 2253 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
26.04.2013, 15:56 5
easybudda, это хороший пример неправильного переопределения эквалса )
в сравнении обязаны участвовать все значащие поля иначе вы имеете проблемы и это только верх айсберга работы с коллекциями
0
652 / 401 / 35
Регистрация: 19.02.2013
Сообщений: 1,072
Записей в блоге: 2
26.04.2013, 16:11 6
Цитата Сообщение от mutagen Посмотреть сообщение
в сравнении обязаны участвовать все поля иначе вы имеете проблемы и это только верх айсберга работы с коллекциями
да ладно
0
2580 / 2253 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
26.04.2013, 16:11 7
Цитата Сообщение от AckiyBolt Посмотреть сообщение
да ладно
я уже профиксил на значимые )))
обязаны или нет - зависит от логики конешн
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
10910 / 6836 / 1625
Регистрация: 25.07.2009
Сообщений: 12,540
26.04.2013, 17:14 8
Цитата Сообщение от mutagen Посмотреть сообщение
это хороший пример неправильного переопределения эквалса
Да это ладно, для этого примера и так сойдёт.
Мне вот интереснее, почему эта чудо-конструкция
Цитата Сообщение от easybudda Посмотреть сообщение
for ( int i = list.indexOf(wanted); i > -1; i = list.subList(i + 1, list.size()).indexOf(wanted) )
не отрабатывает? По отдельности и indexOf() и subList() и та же equals() выдают то, что задумано, а вот так в цикле фигня какая-то получается...
0
2580 / 2253 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
26.04.2013, 17:26 9
Цитата Сообщение от easybudda Посмотреть сообщение
почему эта чудо-конструкция
видимо потому что вам нужен итератор из полученного сублиста, а не лазить по нему как по массиву

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

Цитата Сообщение от mutagen Посмотреть сообщение
если вы хотите выхватить всех вантедов не лучше ли их фильтрануть в отдельную коллекцию?
Да ни минуты не сомневаюсь, что лучше! Одна беда - не знаю, как это делается...
В цикле по листу вот так все нашлись:
Java
1
2
3
        for ( User u : list )
            if ( u.equals(wanted) )
                System.out.println(u);
но сдаётся, что это не тру-вей, и Вы о чём-то другом говорите.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.04.2013, 17:42

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.