Возможно ли boolean перевести в int

103
17 февраля 2021, 14:40

Возможно ли boolean перевести в int для сортировки с помощью Comparable.

true = 1
false = -1
Answer 1

Может быть

boolean b = true;    
int i = b ? 1 : -1
Answer 2

Не совсем понятно зачем, но можно так

boolean a = false;
int i = a ? 1 : -1;

Если нужно отсортировать массив Boolean, можно сделать так:

Boolean[] bools = new Boolean[]{true, false, true, false};
        Arrays.sort(bools, new Comparator<Boolean>() {
            @Override
            public int compare(Boolean o1, Boolean o2) {
                if (o1 && !o2)
                    return 1;
                else if (!o1 && o2)
                    return -1;
                else
                    return 0;
            }
        });

или с лямбдой:

Arrays.sort(bools, (o1, o2) -> {
            if (o1 && !o2)
                return 1;
            else if (!o1 && o2)
                return -1;
            else
                return 0;
        });
Answer 3

Отсортировать массив можно довольно просто:

Arrays.sort(bools, (x, y) -> x == y ? 0 : x ? 1 : -1);

Но если в массиве действительно лежат booleaan'ы (т. е. это не поле какого-то объекта), то сортировать его не надо, достаточно просто посчитать количество.

Answer 4

Класс Boolean уже реализует Comparable<Boolean>, так что при сортировке дополнительные действия не требуются.

Boolean[] arr = new Boolean[] {true, false, true, false};
Arrays.sort(arr);

Если нужно сортировать по булевому полю класса, сложности также не возникнут.

public class Record {
    private final boolean flag;
    public boolean getFlag() {
        return flag;
    }
    ...
}
Record[] arr = new Record[] {new Record(true), new Record(false)};
Arrays.sort(arr, Comparator.comparing(Record::getFlag));

В конце концов, для сравнения примитивных boolean есть Boolean::compare

System.out.println(Boolean.compare(false, true)); // -1
READ ALSO
Scheduled tasks в java

Scheduled tasks в java

Есть SpringBoot app, и есть задача: организувать список задач которые будут запускаться в определенное время

138
Synchronized-блок Java

Synchronized-блок Java

Есть два класса

104
Добавить в объект такую часть кода

Добавить в объект такую часть кода

Нужно выводить изображение на канвасе через объект, все изображения необходимо добавить в объектПоскажите, как это сделать?

94
Как получить массив из двух массивов, минуя повторяющиеся элементы?

Как получить массив из двух массивов, минуя повторяющиеся элементы?

Уважаемые не подскажите или не подтолкнете к верному решениюЕсть два массива

95