Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Как отсортировать этот массив объектов? (Java)

Pipl Pepolov Ученик (100), закрыт 4 года назад
Как провести сортировку массива List по элементу id где сперва true, а потом false

public class Met {
public static void main(String[] args){

Object[] List = {
new Student(),
new Schoolboy()
};

}

public static class Student{
private boolean id=true; <---------
public boolean isId() {
return id;
}
}

public static class Schoolboy{
private boolean id=false; <------------
public boolean isId() {
return id;
}

}
}
Лучший ответ
クマのプーさん Мудрец (15499) 4 года назад
для начала унаследовать студентов-школьников от одного суперкласса, чтобы в его интерфейсе было то общее, по чему сортируется
потом нарисовтаь компаратор:
Collections.sort(list, (X x1, X x2) -> x1isId()? 0:1 - x2.isId()? 0:1);
где X этот самый суперкласс с метдом isId()
Pipl PepolovУченик (100) 4 года назад
смотри я сделал так но ошибка тут << x1.id()? 0:1 - x2.id()? 0:1 >>

Required boolean
Found int

import java.util.Collections;

public class Met {
public static void main(String[] args){

Object[] List = {
new Student(),
new Schoolboy()
};

Collections.sort(List, (People x1, People x2) -> x1.id()? 0:1 - x2.id()? 0:1);

}

public static class Student implements People{
private boolean id=false;
@Override
public boolean id() {
return id;
}
}

public static class Schoolboy implements People{
private boolean id=true;
@Override
public boolean id() {
return id;
}
}

public interface People {
boolean id();

}
クマのプーさん Мудрец (15499) Слуш, нафига ты называешь list то, что листом не является? Во-первых поменяй на Arrays.sort. И скобки там нужны: Arrays.sort(List, (People x1, People x2)-> (x1.id()? 0:1) - (x2.id()? 0:1)); А во-вторых сам массив должен быть не Object'ов, а People'ов
Остальные ответы
Angel Профи (939) 4 года назад
никогда не пишите переменные с большой буквы. Тем более что уже есть Интерфейс с названием List.
Массив сортировать так:
Arrays.sort(array, comparator)
Напишите свою реализацию компаратора.
Pipl PepolovУченик (100) 4 года назад
Спасиб, это сделал но вот возник еще вопрос, как вывести только человека с id=true вопрос тут
https://otvet.mail.ru/question/216753197
Angel Профи (939) И обязательно переименуйте переменные. Это не прихоть. Есть стандарт кода для java. Компилятор конечно отработает но в любой фирме программисту который такое напишет, руки вырвут) В java есть массивы и есть коллекции в том числе интерфейс List и часто используемая реализация ArrayList. Как можно догадаться из названия, это обёртка над массивом, размер которого автоматически увеличивается при добавлении элементов. Поэтому не стоит назвать переменные типа array названием list. Сами потом запутаетесь.
Похожие вопросы