Перейти к публикации
  • Сейчас на странице   Всего пользователей: 0   (0 пользователей, 0 гостей)

Rooster

Программирование, т. 8

  

315 пользователей проголосовало

У вас нет прав на голосование в этом опросе, или на просмотр результатов опроса. Пожалуйста, войдите или зарегистрируйтесь для голосования в опросе.

Рекомендованные сообщения

(изменено)
но всё равно, когда пишу такой код даже с условием, что я его больше не увижу, мне становится хуёво 

в томже питоне можно сделать любую сортировку в одну строку с кучей скобочек [], отрицательный индексинг этож фича

но онож раскладывается до техже циклов

 

хочешь больше "высокоуровневости" использую scala или javascript

где накодили еще миллион встроенных методов, к базовым джавовским

 

тогда в твоем коде циклов не будет, будет красивый текст...но работать то будет через циклы по прежнему


Изменено пользователем hira88

Поделиться сообщением


Ссылка на сообщение

джава боги, есть ебанутые таски:

1) отфильтровать (удалить или оставить) с массива объекты по типу. Тип фильтрации может быть null, те оставить все у которых obj.type == null, остальные удалить с массива), у объекта тип тоже может быть null, сам объект может быть null).

Есть ли вообще ауты сделать это все "красиво" через stream.filter без ебанутых проверок внутри? Пока такая штука сделана обычным итерированием массива с ифами внутри, выглядит очень мерзко.

 

2) отсортировать массив по критерию у объекта, объекты в массиве, как и поля объекта нужные для сортировки, могут быть null. сортировать должно по условию: null в конец, объекты у которых поле null перед нуллами, остальное по возрастанию.

Это тоже сделал через компаратор, но опять же, выглядит как хуйня... Мб есть какие-то варианты это сделать более красивым?

 

Хелпаните плез, просто заебался от мерзких костылей...

А итеративный процесс не получится использовать в твоей сортировке?


 

Жиза для любопытных

Чекнул = пидор

 

Поделиться сообщением


Ссылка на сообщение

это ты про foreach или другой итератор, то нет, ибо там могут быть null.

Поделиться сообщением


Ссылка на сообщение

Кидай код, может ты говна въебал


Russia.png.ea080e101222d708d08842dae4ccc684.png USA.png.9b863586cd992fb91bf92ed1de03e4cc.png Israel.png.f27d10a4455f05cd161a8c2c52b8b5e1.png

Поделиться сообщением


Ссылка на сообщение

допустим фильтрация по type 

        for (int i = 0; i < devices.length; i++) {
            if (devices[i] != null) {
                if ((type != null && devices[i].getType() == null)
                        || (devices[i].getType() != null && (type == null || !devices[i].getType().equals(type)))) {
                    devices[i] = null;
                }
            }
        }

Поделиться сообщением


Ссылка на сообщение

Кидай код, может ты говна въебал

https://i.postimg.cc/YqHFQtP5/image.jpg

Поделиться сообщением


Ссылка на сообщение
Гость LifeIsPain
(изменено)
 
  for (int i = 0; i < devices.length; i++) {
            if (devices[i] == null) continue;

            boolean first = type != null && devices[i].getType() == null;
            boolean second = devices[i].getType() != null
            boolean third = type == null || !devices[i].getType().equals(type);

            if (first || (second && third)) devices[i] = null;
        }

не благодари


Изменено пользователем LifeIsPain
Feedle понравилось это

Поделиться сообщением


Ссылка на сообщение

for (int i = 0; i < devices.length; i++) {
Type device = devices[i];

if (device == null) {
continue;
}

Type deviceType = device.getType();
boolean first = type != null && deviceType == null;
boolean second = deviceType != null;
boolean third = type == null || !deviceType.equals(type);

if (first || (second && third)) {
devices[i] = null;
}
}
Feedle понравилось это

Russia.png.ea080e101222d708d08842dae4ccc684.png USA.png.9b863586cd992fb91bf92ed1de03e4cc.png Israel.png.f27d10a4455f05cd161a8c2c52b8b5e1.png

Поделиться сообщением


Ссылка на сообщение

ну я канеш и далбаеб, так хоть сразу понятно что происходит...

Поделиться сообщением


Ссылка на сообщение

а всего-то переменные объявили

Поделиться сообщением


Ссылка на сообщение
(изменено)

с нуллами надо optional использовать

их быть не должно


Изменено пользователем Just.Doit

 

очень крутые котейки

RqvSzvr.png


Кому-то пизды дал - нужно сделать скрин обязательно. (с) Solo

Поделиться сообщением


Ссылка на сообщение

джава боги, есть ебанутые таски:

1) отфильтровать (удалить или оставить) с массива объекты по типу. Тип фильтрации может быть null, те оставить все у которых obj.type == null, остальные удалить с массива), у объекта тип тоже может быть null, сам объект может быть null).

Есть ли вообще ауты сделать это все "красиво" через stream.filter без ебанутых проверок внутри? Пока такая штука сделана обычным итерированием массива с ифами внутри, выглядит очень мерзко.

        Object[] array = new Object[]{555, 5454, "pidor", null, null, null};
        System.out.println("Before: " + Arrays.toString(array));
        array = Arrays.stream(array).filter(o -> {
            if (o == null) {
                return false;
            } else if (o instanceof Integer) {
                return false;
            } //todo else if
            return true;
        }).toArray();
        System.out.println("After: " + Arrays.toString(array));
Before: [555, 5454, pidor, null, null, null]
After: [pidor]
 
Хуле сложного?
Feedle и `KV понравилось это

Поделиться сообщением


Ссылка на сообщение

 

 

отфильтровать (удалить или оставить) с массива объекты

 

 

Есть ли вообще ауты сделать это все "красиво" через stream.filter без ебанутых проверок внутри?

тебе надо понимать, что стримы не поменяют твой массив, а дадут новый, если с етим нету проблемы то юзай пример индекса

 

 

 

Это тоже сделал через компаратор, но опять же, выглядит как хуйня...
 

типа сам компаратор имплементил?

Arrays.sort(huici, nullsLast(comparing(Hui::getDlina, nullsLast(naturalOrder()))))
Feedle понравилось это

Поделиться сообщением


Ссылка на сообщение
        devices = Arrays.stream(devices).filter(device -> {
            if (device == null) {
                return false;
            }
            Type deviceType = device.getType();
            boolean first = type != null && deviceType == null;
            boolean second = deviceType != null;
            boolean third = type == null || !deviceType.equals(type);
            return !(first || (second && third));
        }).toArray();  

Интегрировал с кодом выше

Feedle понравилось это

Поделиться сообщением


Ссылка на сообщение
(изменено)
типа сам компаратор имплементил?
Arrays.sort(huici, nullsLast(comparing(Hui::getDlina, nullsLast(naturalOrder()))))

да, ну вот я так и сделал через Arrays.sort и мой компаратор, правда без nullsLast

 

всё парни, я понял путь, теперь в таких ебанутых условиях буду разбивать всё по частям, чтоб не было той хуйни как я сделал.

бтв там у меня НПЕ вылазит в тесте с вашими проверками, но я уже поправил (это был скорее всего мой косяк с изначальными цепочками условий, которые можно было оптимизировать)

всем спасибо)

 

PS: сам кейс учебный, не думаю, что с такими хуйнями сталкиваются часто в ИРЛ


Изменено пользователем Feedle

Поделиться сообщением


Ссылка на сообщение
        Arrays.sort(array, (o1, o2) -> {
            Integer o1priority = o1 == null ? Integer.MAX_VALUE : o1.getType() == null ? Integer.MAX_VALUE - 1 : o1.getDlina();
            Integer o2priority = o2 == null ? Integer.MAX_VALUE : o2.getType() == null ? Integer.MAX_VALUE - 1 : o2.getDlina();
            return Integer.compare(o1priority, o2priority);
        });

Как бы я сортировку сделал.

Поделиться сообщением


Ссылка на сообщение

ну это выглядит не лучше чем мой компаратор на пару условий :)
я просто думал мб есть варики без особого описания своей логики сортировки (допустим до этого я не знал про nullFirst\nullLast)

Поделиться сообщением


Ссылка на сообщение

я просто думал мб есть варики без особого описания своей логики сортировки (допустим до этого я не знал про nullFirst\nullLast)

Есть варики. Винду переустановить например

`KV понравилось это

 

Жиза для любопытных

Чекнул = пидор

 

Поделиться сообщением


Ссылка на сообщение

кажется пора смахнуть пыль с правила о винампе

kijupsik, Rooster и Feanaro понравилось это

Торжество разума в том, чтобы уживаться с теми, у кого этого разума нет. Вольтер.
Чтобы хорошо высыпаться, нужно спать 8 часов в день. И еще столько же ночью.

Поделиться сообщением


Ссылка на сообщение
Гость
Эта тема закрыта для публикации сообщений.

×
×
  • Создать...