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

Rooster

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

  

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

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

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

        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);
        });

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

 

Уже звоню в полицию


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

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


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

да это беларусы ебаные, нет бы батьку сместить за налог за безработицу - тернарки ебашут

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


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

 

в чем проблема уехать в москву\киев? семья дети? с собой возьми

у меня лично денег нет(этож хотяб 1к$ надо)

 

а зарплат местных даже за 10 лет не хватит накопить чтоб хотяб на пол года пожить в киеве/москве

 

https://www.bountysource.com/ пробовал? там много кому кресты нужны


Публикация отключена

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


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

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

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

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

 

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

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

 

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

нихуя не понял чо тебе надо

но смотрю тебе что-то подсказали переписав твой код

кстати это 1 или 2 задача?

 

и кстати всем минус за именование переменных блять  :fffuuu:


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

:buba:

ни мало ни много, а много и мало

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


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

мб я херово описал, мб кейс такой
это две разные задачи
сейчас, кстати, код выглядит вот так:

boolean first = check != null && dataField == null;
boolean second = dataField != null && (check == null || !dataField.equals(check));

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

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

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


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

что значит фильтр мб null

это как наъуй

ты или фильтруешь или нет

причем тут null  :fffuuu:


:buba:

ни мало ни много, а много и мало

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


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

что значит фильтр мб null

это как наъуй

ты или фильтруешь или нет

причем тут null  :fffuuu:

ну смотри

есть массив 

obj нормальный объект

у obj2.type == null

{null, null, obj, obj2, null, obj, null, obj2}

после фильтрации по null останется

{null, null. null, obj2, null, null, null, obj2}

т.е. только те объекты, у которых тип == null 

крч если тип фильтра null, то это не пустой объект, а нормальная ситуация для системы


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

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


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

@@Feedle

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

 

столько времени уделять такому пустяку такое себе, я тож раньше тригерился на всякие пхп фреймворки/дж либы, щас просто юзаю на похуй как сделано там так и сделано, хуй с ними

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

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


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

Я бы так сделал:

import java.util.*;
import java.util.stream.Collectors;

public class main {
    public static void main(String[] args) {
        List<Device> devices = Arrays.asList(
                device("10cm", Type.HUI_TYPE, 10),
                device("20cm", Type.HUI_TYPE, 50),
                null,
                device("vedro", Type.PIZDA_TYPE, -5),
                device("mishinii glaz", Type.PIZDA_TYPE, null),
                device("mamka", null, null),
                device("papka", null, 100),
                null);
        
        System.out.println(filterByType(devices, Type.HUI_TYPE));
        System.out.println(filterByType(devices, Type.PIZDA_TYPE));
        System.out.println(filterByType(devices, null));

        System.out.println(sortByFields(devices, NAME_SORTER));
        System.out.println(sortByFields(devices, COMP_FIELD_SORTER));
        System.out.println(sortByFields(devices, NAME_SORTER, COMP_FIELD_SORTER));
    }

    private static List<Device> sortByFields(List<Device> devices, Comparator<Device> ...sorters) {
        devices.sort(Comparator.nullsLast(new ChainComparator(sorters)));
        return devices;
    }

    private static List<Device> filterByType(List<Device> devices, Type type) {
        return devices.stream().filter(Objects::nonNull).filter(device -> device.getType().equals(type)).collect(Collectors.toList());
    }

    public static class Device {
        final private Type type;
        final private Integer someComparableField;
        final private String name;

        public Device(String name, Type type, Integer compField) {
            this.type = Optional.ofNullable(type).orElse(Type.NULL_TYPE);
            this.someComparableField = Optional.ofNullable(compField).orElse(Integer.MAX_VALUE);
            this.name = name;

        }

        public Type getType() {
            return type;
        }

        public String getName() {
            return name;
        }

        public Integer getSomeComparableField() {
            return someComparableField;
        }

        @Override
        public String toString() {
            return "Device{" +
                    "someComparableField=" + someComparableField +
                    ", name='" + name + '\'' +
                    '}';
        }
    }

    private static Device device(String name, Type type, Integer compField) {
        return new Device(name, type, compField);
    }

    interface Type {
        Type HUI_TYPE = new HuiType();
        Type PIZDA_TYPE = new PizdaType();
        Type NULL_TYPE = new Type() {
            @Override
            public boolean equals(Object obj) {
                return obj == null;
            }
        };
    }

    public static class HuiType implements Type { }

    public static class PizdaType implements Type { }

    public static final Comparator<Device> NAME_SORTER = Comparator.comparing(Device::getName);

    public static final Comparator<Device> COMP_FIELD_SORTER = Comparator.comparingInt(Device::getSomeComparableField);

    public static class ChainComparator implements Comparator<Device> {
        private final List<Comparator<Device>> comparators;

        public ChainComparator(Comparator<Device> ... comparators) {
            this.comparators = Arrays.asList(comparators);
        }

        @Override
        public int compare(Device o1, Device o2) {
            for (Comparator<Device> comparator : comparators) {
                int result = comparator.compare(o1, o2);
                if (result != 0) {
                    return result;
                }
            }
            return 0;
        }
    }
}

Тесты:

[Device{someComparableField=10, name='10cm'}, Device{someComparableField=50, name='20cm'}]
[Device{someComparableField=-5, name='vedro'}, Device{someComparableField=2147483647, name='mishinii glaz'}]
[Device{someComparableField=2147483647, name='mamka'}, Device{someComparableField=100, name='papka'}]
[Device{someComparableField=10, name='10cm'}, Device{someComparableField=50, name='20cm'}, Device{someComparableField=2147483647, name='mamka'}, Device{someComparableField=2147483647, name='mishinii glaz'}, Device{someComparableField=100, name='papka'}, Device{someComparableField=-5, name='vedro'}, null, null]
[Device{someComparableField=-5, name='vedro'}, Device{someComparableField=10, name='10cm'}, Device{someComparableField=50, name='20cm'}, Device{someComparableField=100, name='papka'}, Device{someComparableField=2147483647, name='mamka'}, Device{someComparableField=2147483647, name='mishinii glaz'}, null, null]
[Device{someComparableField=10, name='10cm'}, Device{someComparableField=50, name='20cm'}, Device{someComparableField=2147483647, name='mamka'}, Device{someComparableField=2147483647, name='mishinii glaz'}, Device{someComparableField=100, name='papka'}, Device{someComparableField=-5, name='vedro'}, null, null]



Изменено пользователем DIMAN123456789
moonfangtopich, TheDeadSkin, Veers и 4 другим понравилось это

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


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

сразу видно сеньер джава девелопера


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

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


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

Я, правда не уверен что верно понял задание ибо накидал за 5 минут, но думаю на основе этого можно сделать норм решение без уёбских 100500 ифэлсов :lolpalm:


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

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


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

Я, правда не уверен что верно понял задание ибо накидал за 5 минут, но думаю на основе этого можно сделать норм решение без уёбских 100500 ифэлсов :lolpalm:

вся суть джовки написать тонну кода для тривиальной задачи ¯\_(ツ)_/¯

 

только чому interface Type а не enum Type  :hmm: 


Изменено пользователем choojoykin
.felix понравилось это

:buba:

ни мало ни много, а много и мало

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


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

я ифэлсы не от хорошей жизни пиздячил, за исключением их оформления, там я говна въебал
я не могу использовать стримы для фильтров, ибо мне нужно менять массив по ссылке
как сказал @@hira88, я ебусь с дизом, который не могу менять.

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

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

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


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

Arrays.asList

переложил проблему из одного в другое

 

питоновцы видя этот Arrays.asList всегда негодуют

 

не доебываюсь, сори

массив по ссылке

>>java

 

как болезнь называется)))

сори рофлю

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


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

 

Я, правда не уверен что верно понял задание ибо накидал за 5 минут, но думаю на основе этого можно сделать норм решение без уёбских 100500 ифэлсов :lolpalm:

вся суть джовки написать тонну кода для тривиальной задачи ¯\_(ツ)_/¯

 

только чому interface Type а не enum Type  :hmm: 

 

Из опыта личного. Энум использовать только когда на 100500 процентов уверен, что НИКОГДА не будет расширения. Типа можно энум использовать для дней недели, некоторых видов листовых атрибутов. Но, блять, уже сколько раз было: ЕБАШИМ СТАТУСЫ ИНУМОМ ACTIVE, FAILED, SUSPENDED, OPEN ДРУГИХ НИКАГДА НИ БУДИТ... спустя 3 месяца,,, СРОЧНА ДОБАВЛЯЙ ERROR СТАТУС ОХ БЛЯТЬ УПАЛО 100500 ДРУГИХ КОМПОНЕНТОВ БЫСТРА ТРАТИМ КОС(М)ИЧЕСКОЕ ЛОЕ НА РЕФАКТОРИНГ!!111 :prayshit:

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

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


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

Боже боже, откуда в массиве вообще взялись null-ы? Там либо примитивы, либо обьекты должны быть. С java кода на 2 странцы просто  :lol:

Ребята, в жс такое делается с помощью одной строки array.filter(el => el !== 'java')

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


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

и как оно тебя убережет в случае тех же статусов?
что такой интерфейс, что просто енум, не содержат логики, ее всё равно придется в каждом нужном месте дописывать свою


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

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


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

@@DIMAN123456789

а почему что-то падает при добавлении новых констант в enum?

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

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


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

 

Я бы так сделал:

    public static final Comparator<Device> NAME_SORTER = Comparator.comparing(Device::getName);

    public static final Comparator<Device> COMP_FIELD_SORTER = Comparator.comparingInt(Device::getSomeComparableField);

    public static class ChainComparator implements Comparator<Device> {
        private final List<Comparator<Device>> comparators;

        public ChainComparator(Comparator<Device> ... comparators) {
            this.comparators = Arrays.asList(comparators);
        }

        @Override
        public int compare(Device o1, Device o2) {
            for (Comparator<Device> comparator : comparators) {
                int result = comparator.compare(o1, o2);
                if (result != 0) {
                    return result;
                }
            }
            return 0;
        }
    }
}

Нахуя?

Когда есть 

    public static final Comparator<Device> ourMegaComparator = Comparator.comparing(Device::getName).thenComparing(Comparator.comparingInt(Device::getSomeComparableField));

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

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


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

 

 

Я, правда не уверен что верно понял задание ибо накидал за 5 минут, но думаю на основе этого можно сделать норм решение без уёбских 100500 ифэлсов :lolpalm:

вся суть джовки написать тонну кода для тривиальной задачи ¯\_(ツ)_/¯

 

только чому interface Type а не enum Type  :hmm: 

 

Из опыта личного. Энум использовать только когда на 100500 процентов уверен, что НИКОГДА не будет расширения. Типа можно энум использовать для дней недели, некоторых видов листовых атрибутов. Но, блять, уже сколько раз было: ЕБАШИМ СТАТУСЫ ИНУМОМ ACTIVE, FAILED, SUSPENDED, OPEN ДРУГИХ НИКАГДА НИ БУДИТ... спустя 3 месяца,,, СРОЧНА ДОБАВЛЯЙ ERROR СТАТУС ОХ БЛЯТЬ УПАЛО 100500 ДРУГИХ КОМПОНЕНТОВ БЫСТРА ТРАТИМ КОС(М)ИЧЕСКОЕ ЛОЕ НА РЕФАКТОРИНГ!!111 :prayshit:

 

нихуя не понял

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


:buba:

ни мало ни много, а много и мало

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


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

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