powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Вывод объектов с уникальным полем
9 сообщений из 9, страница 1 из 1
Вывод объектов с уникальным полем
    #38561573
Leyla89
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть класс Студент и отсортированный список с 10 объектами (поля вводятся с консоли в формате id-оценка). Если есть несколько записей с одинаковыми id, то программа должна выбрать только одну запись с максимальной оценкой и вывести список объектов. Подскажите, пожалуйста, с помощью чего это сделать.
Код: 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.
public class Student implements Comparable {

private int idSt;
private int score;

public Student(int id, int sc) {
    idSt = id;
    score = sc;
}

public int getScore() {
    return score;
}

public int getIdStudent() {
    return idSt;
}

public String toString() {
    return idSt + "-" + score;
}

@Override
public int compareTo(Object obj) {
    Student tmp = (Student) obj;
    if (this.score > tmp.score) {
        return -1;
    } else if (this.score < tmp.score) {
        return 1;
    }
    return 0;
}
}

public class SortScore {

public static void main(String[] args) {
    List<Student> st = new ArrayList<Student>();

    Scanner sc = new Scanner(System.in);
    sc.useDelimiter("[-\\n]");
    for(int i = 0; i < 10; i++){    
        int a = sc.nextInt();
        int b = sc.nextInt();
        st.add(new Student(a, b));
    }

    Collections.sort(st);            
    System.out.println(st);     
}
}
...
Рейтинг: 0 / 0
Вывод объектов с уникальным полем
    #38561648
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Данная задача эффективно решается на SQL. На Java она решается неэффективно.
...
Рейтинг: 0 / 0
Вывод объектов с уникальным полем
    #38561743
avp.mk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leyla89, по-быстрому можно список в Set добавить.
Код: 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.
package student;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.HashSet;
import java.util.Scanner;

import static java.lang.System.out;

public class Student implements Comparable<Student> {

    public final int id, score;

    public Student(int id, int score) {
        this.id = id;
        this.score = score;
    }

    @Override public String toString() {
        return id + "-" + score;
    }

    @Override public int compareTo(Student anotherStudent) {
        if (id != anotherStudent.id) {
            return compareAsc(id, anotherStudent.id);
        }
        if (score != anotherStudent.score) {
            return compareDsc(score, anotherStudent.score);
        }
        return 0;
    }

    private static int compareAsc(int a, int b) { return a < b ? -1 :  1; }
    private static int compareDsc(int a, int b) { return a < b ?  1 : -1; }

    @Override public int hashCode() {
        return id;
    }

    @Override public boolean equals(Object another) {
        return another instanceof Student && id == ((Student) another).id;
    }

    public static void main(String[] args) {
        List<Student> students = new ArrayList<>();
        Scanner scanner = new Scanner(System.in);
        scanner.useDelimiter("[-\\n]");
        while (scanner.hasNextInt()) {
            int id = scanner.nextInt();
            if (scanner.hasNextInt()) {
                int score = scanner.nextInt();
                students.add(new Student(id, score));
            }
        }

        Collections.sort(students);
        out.println(new HashSet(students));
    }
}
...
Рейтинг: 0 / 0
Вывод объектов с уникальным полем
    #38561904
Alex Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leyla89,

Сортировку сделать следующим образом: id по возрастанию, score по убыванию.
Затем за один проход в цикле просто вывести "первые" записи для каждого из id.
...
Рейтинг: 0 / 0
Вывод объектов с уникальным полем
    #38561970
avp.mk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alex KuznetsovЗатем за один проход в цикле просто вывести "первые" записи для каждого из id.
Да, так лучше. Меньше магии, нагляднее, не создаём лишнюю коллекцию (HashSet) -> быстрее получаем результат, equals и hashCode можно удалить.
Ещё лучше не хранить не нужные score.
...
Рейтинг: 0 / 0
Вывод объектов с уникальным полем
    #38562137
Alex Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
avp.mk...
Ещё лучше не хранить не нужные score.Это невозможно по условию задачи...
...
Рейтинг: 0 / 0
Вывод объектов с уникальным полем
    #38562138
Alex Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonДанная задача эффективно решается на SQL. На Java она решается неэффективно.Вопроса про эфективность и использования технологий отличных от Java не было.
...
Рейтинг: 0 / 0
Вывод объектов с уникальным полем
    #38562142
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leyla89,

Другой подход к решению задачи:
Код: 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.
class Students extends java.util.TreeMap<Integer, Integer> {

    private static final long serialVersionUID = 1L;
    
    @Override
    public Integer put(Integer id, Integer score) {
        if (containsKey(id)) {
            if (get(id) > score) {
                return null;
            }
        }
        return super.put(id, score);
    }
}

...

Students students = new Students();
students.put(20, 26);
students.put(20, 57);
students.put(48, 20);
students.put(9, 77);
students.put(67, 84);
students.put(95, 62);
students.put(75, 52);
students.put(54, 3);
students.put(62, 26);
students.put(26, 38);		
students.put(0, 5);
students.put(0, 4);
students.put(0, 3);
System.out.println(students); // {0=5, 9=77, 20=57, 26=38, 48=20, 54=3, 62=26, 67=84, 75=52, 95=62}
...
Рейтинг: 0 / 0
Вывод объектов с уникальным полем
    #38562417
Alex Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Usman,

Решение не согласуется с условием задачи, т.к. в дерево попадают только объекты с максимальным значением score, а должны попадать все объекты...
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Вывод объектов с уникальным полем
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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