• Как сравнить два ArrayList`a по их содержимому?

    @odissey_nemo
    Dmitry Roo,
    Дело вкуса. Мне привычнее и понятнее циклы и коллекции. Стримы просто без надобности.
    Хотя не отрицаю, что кода с ними меньше. Но меньше - не значит понятнее. Чем выше абстракция, тем она обычно сложнее.

    Пруфы в Инете не искал. Делал сам.
    А циклы и коллекции быстрее по простой причине. Стримы слишком универсальны. должны удовлетворить всем типам данных. Поэтому с помощью них трудно выбрать все варианты и особенности структур данных. Например, в одном цикле можно сделать несколько произвольных операций над элементом коллекции, что является естественным.
    В то же время стримы. их операторы делают что-либо на лету, за один проход. Стало быть. понадобится несколько проходов для доступа к разным элементам и их данным.
    Грубо говоря, там где надо два стрима запустить, достаточно одного цикла.
    В любом случае, разница в производительности вряд ли будет критической. Главное - понятность и ясность кода для автора. И для будущих читателей.
    Это - главное!
  • Как определить центры зон определенных цветов на изображении?

    @odissey_nemo
    Если гарантированно известно, что каждый уникальный цвет присвоен единственному связному полигону, и известен цвет границы (например чёрный), то просто проходим по всем пикселам, отбрасывая чёрные и суммируем их координаты группируя по цвету.
    Если цвет встретился первый раз, заводим для него необходимые структуры: цвет, счётчик пикселей (чтобы делить на него), суммы по координатам (чтобы их делить).
    В итоге имеет число цветов, и по каждому цвету его средние координаты (центр тяжести), где бы они не были (даже вовне полигона данного цвета).
  • Как в списке отличить буквы и ЗАГЛАВНЫЕ БУКВЫ от всего остального?

    @odissey_nemo
    wolverine777, тогда не понимаю, в чём дело.
    >java -version
    java version "1.8.0_241"
    Java(TM) SE Runtime Environment (build 1.8.0_241-b07)
    Java HotSpot(TM) 64-Bit Server VM (build 25.241-b07, mixed mode)
  • Как сравнить два ArrayList`a по их содержимому?

    @odissey_nemo
    Мне кажется ,что вы на каждой итерации цикла перезаписываете ваши found новым значением для найденного текущего значения rbs в partnerList.
    Надо не перезаписывать. а добавлять, типа:
    ...
    found.add( partnerList.stream()
           .filter(paymentPartner ->
           paymentPartner.getAccount().equals(rbs.getAccount()) && paymentPartner.getSum() == rbs.getSum())
           .collect(Collectors.toList()));
    ...
  • Как сравнить два ArrayList`a по их содержимому?

    @odissey_nemo
    Да, это было бы эффективнее, хотя тоже не слишком понятно с первого взгляда.

    Наблюдал, что просто использование стримов, где только можно, резко тормозит скорость работы программы.
    Старые добрые и простые коллекции , в этом плане, гораздо быстрее. Хотя бы за счёт вынужденной продуманности их применения.

    Я так понимаю, человеку надо найти в двух списках все одинаковые чеки PaymentPartner и PaymentRBS с одинаковыми номерами счетов и суммами в них?
    При этом ведь могут быть даже одинаковые чеки с теми же суммами в любом списке, например.
    Если да то, может быть, удастся обойтись одним Set, если бы оба класса были бы одинаковыми или имели общий интерфейс/класс-предок для getAccount и getSum(). И переписать у них hashCode() и equals() так, чтобы они захватывали и аккаунт и сумму.
    hasCode() можно сделать как для строки, состоящей из текстовых представлений аккаунта и суммы, через запятую. Например:
    public int hashCode() { return String.format("%d,%f", getAccount(), getSum()).hashCode();  }


    В этом случае Set заполнить из списка rbsList. Затем пройтись по всему списку из partnerList, изучая. если ли элементы из него уже в Set. Те элементы из partnerList, что уже присутствуют в Set и есть искомые PaymentPartner. имеющие аналог в rbsList.
    Итого - всего по одному проходу по каждому списка (N+M). В отличи от M*N сравнений в указанном коде.
    Не уверен точно, но кажется работоспособным. С учётом высказанных выше пожеланий к классам.
  • Как в списке отличить буквы и ЗАГЛАВНЫЕ БУКВЫ от всего остального?

    @odissey_nemo
    wolverine777, Возможно, проблема в версии JRE Java, использованной в вашем эмуляторе. У меня библиотека Java 8.
    Попробуйте заменить на код работающий и под 5-й версией Java:
    public static void main(String[] args) {
            char[] aMixed = "aAbBqwerrtyASFDSDFDF0123456   +_)(£*^\"(£)(&07097097".toCharArray();
            int cntLower = 0, cntUpper =  0;
            for (int ch: aMixed) {
                if (Character.isLowerCase(ch))
                    cntLower++;
                else if (Character.isUpperCase(ch))
                    cntUpper++;
            }
            String ver = System.getProperty( "java.version" );
            System.out.printf("Java version: %s. ", ver == null ? "<unknown>" : ver);
            System.out.printf("Found lower case chars %d, upper case chars %d%n", cntLower, cntUpper);
        }

    Судя по всему, на эмуляторе где ошибка возникает, стоит JRE нижней версии, где просто нет метода isXXXXXCase(char), но уже есть (надеюсь :o) isXXXXXCase(int), что в данном случае монопенисуально, на не слишком глубокий взгляд.
    В этом коде заодно и на версию Java посмотрим, если он обозначен в системе вообще .

    Печатать будет теперь так:

    Java version: 1.8.0_241. Found lower case chars 9, upper case chars 11
  • Почему у строк всегда одиноковый hashcode()?

    @odissey_nemo
    Простая программа поможет разобраться:
    private static void main(String[] args)
            String str1 = "Hello"; // строка-константа помещается компилятором в общий пул строк
            String str2 = "Hello"; // строка-константа помещается компилятором в общий пул строк
            String str3 = new String ("Hello");  // новая строка хранится вне пула, в хипе
            String str4 = new String ("Hello").intern(); // intern опять помещает строку в общий пул строк
            System.out.println("Проверка по равенству значений:");
            System.out.printf("str1.equals(str2) => %b%n", str1.equals(str2));
            System.out.printf("str2.equals(str3) => %b%n", str2.equals(str3));
            System.out.printf("str3.equals(str4) => %b%n", str3.equals(str4));
            System.out.printf("str1.equals(str4) => %b%n", str1.equals(str4));
            System.out.println("Проверка по равенству ссылок(адресов):");
            System.out.printf("(str1 == str2) => %b%n", str1 == str2);
            System.out.printf("(str2 == str3) => %b%n", str2 == str3);
            System.out.printf("(str3 == str4) => %b%n", str3 == str4);
            System.out.printf("(str1 == str4) => %b%n", str1 == str4);
        }


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

    Программа печатает следующее:
    Проверка по равенству значений:
    str1.equals(str2) => true
    str2.equals(str3) => true
    str3.equals(str4) => true
    str1.equals(str4) => true
    Проверка по равенству ссылок(адресов):
    (str1 == str2) => true
    (str2 == str3) => false
    (str3 == str4) => false
    (str1 == str4) => true
  • Как в списке отличить буквы и ЗАГЛАВНЫЕ БУКВЫ от всего остального?

    @odissey_nemo
    public static void main(String[] args) {
            char[] aMixed = "aAbBqwerrtyASFDSDFDF0123456   +_)(£*^\"(£)(&07097097".toCharArray();
            int cntLower = 0, cntUpper =  0;
            for (char ch: aMixed)
                if ( Character.isLowerCase( ch ) )
                    cntLower++;
                else if (Character.isUpperCase(ch))
                        cntUpper++;
            System.out.printf("Found lower case chars %d, upper case chars %d%n", cntLower, cntUpper);
        }

    Печатает следующее: Found lower case chars 9, upper case chars 11

    Ответ верный, никакие символы, кроме букв обеих регистров, в счётчики не проникают.
  • Плавное появление окна JFrame?

    @odissey_nemo
    Конечно, нет. Имел в виду, что при ответе лучше перебрать, чем недобдеть)))
  • Плавное появление окна JFrame?

    @odissey_nemo
    Александр Интересный, без обид, т-щ программист! На вашем акккаунте ведь не написано, "новичок" или "убийца RAD систем"))))
  • Плавное появление окна JFrame?

    @odissey_nemo
    Александр Интересный, что-то такое было...
    Например, так:
    JFrame window = null;
            AWTUtilities.setWindowOpacity(window, 0.7f);

    А может. ещё какой метод есть, более простой, поищи в Инет, пожалуй.
    Далее, соответственно, создаёшь окно, устанавливаешь в начале. перед его показом, непрозрачность 0. Затем в цикле, лучше по таймеру или даже в нитке с засыпанием (sleep с каким-то интервалом), повышаешь непрозрачность до 1.
  • Как сделать красивые "стыки" полигонов автоматически?

    @odissey_nemo
    Отдельные полигоны - лишь замкнутые контура из точек залитые цветом. Система отрисовки не знает про их соседство и отсюда такие артефакты. Вам необходимо подтянуть все близлежащие точки соседних полигонов друг к другу, чтобы они совпадали. Есть специальные инструменты для этого в ГИС-системах, которые занимаются и векторизацией.
    Более профессиональное решение - хранить все полигоны как массивы индексов из единого массива точек, где один индекс может присутствовать в двух (и более, в случае угловой точки) соседних полигонах.
  • Как разделить области на карте границей?

    @odissey_nemo
    pshevnin, возможно, к закрашиваемым в качестве границы стоит отнести и пикселы по диагонали от граничных, не только те что сбоку или сверху.
  • Подходит ли библиотека swing, чтобы воспроизвести MS Paint (win7)?

    @odissey_nemo
    Рисуй в BufferedImage (BI) размером ровно в область отрисовки. А repaint() пусть выводит запрошенный для обновления кусок этого BI уже на канву, в графику Swing.
    Область перерисовки в Swing оптимизируется, т.е. мелкие прямоугольники, не выведенные в небольшой промежуток времени , будут объединяться в более крупные, включающие мелкие, И тогда скорости будет хватать на всё.

    Если что-то очень сложное - переносить само рисование в отдельную нить, куда передавать свои примитивы рисования (можно в очередь синхронную). BI позволяет создать свою Graphics2D, куда можно рисовать из любой нити без особого риска, особенно если озаботиться синхронизацией по доступу к единому BI. Но хватит и одной дополнительной нити отрисовки в BI, думаю. А уже отрисовывать BI на JPanel (скажем) - дело техники. Возможно, стоит синхронизовать доступ к BI из repaint() и из дополнительной нити на его изменение.
  • Отличает ли спутник автомобили от других объектов на карте?

    @odissey_nemo
    Спутник не работает ни с чем, если это не спутник ПРО, конечно. Он просто выполняет свою работу, в вашем случае, сканирует земную поверхность и в сыром виде отправляет снятые данные на земную антенну.

    Там снимки очищаются, обрабатываются и сохраняются в хранилище в стандартном, привязанном к координатам виде. Всё это занимает время, достаточно немалое. Поэтому о работе в реальном масштабе времени, тем более о слежении за какими то конкретным объектами (как с вертолёта за авто или даже с самолёта с хорошей оптикой) речи не идёт и идти не может.
    Даже спутник ПРО вряд-ли обрабатывает что-то на борту. Скорее, он отсылает быстро на Землю, где быстро и грубо обрабатывают отдельные ИЗВЕСТНЫЕ места нахождения баллистических ракет на предмет известных признаков, типа инфракрасных факелов, например. На деле распознаванием подлетающих ракет занимаются на загоризонтных РЛС той же ПРО, но на земле. Там рассматривают небо, где объектов практически нет (те же спутники, их всего несколько тысяч и все наперечёт известны, где и когда находятся). И если в небе появляется объект со скоростью близкой к 1-й космической, распознать его достаточно просто (Доплеровский эффект)

    Далее снимки берёт (покупает) та или иная организация и уже ищет на снимке интересующие её объекты своим способом. Вот тогда уже можно найти и авто и дороги и здания. Собственно, это задача т.н. аэрогеодезических предприятий - обновление карт по данным спутниковой (и не только) съёмки. Автомобили такую контору не интересуют, конечно.
    Авто интересуются какие нибудь другие службы, типа учёных, дорожников, гиббонов и прочих.
  • Как массово преобразовать фотографии из вертикальных в горизонтальные с размытым фоном?

    @odissey_nemo
    Итак, существует конечная картинка с заданным размером. И она не вертикальная.
    Предположим, что пропорции исходной картинки изначально как у смартфона, это ведь она вертикальная, не так ли?
    Затем вписываешь вертикальную в конечную так, чтобы она стала высотой с результирующую картинку.
    При этом результат представляет собой картинку из трех сопряжённых частей, где центральная занята исходной картинкой, а боковые надо скопировать (с масштабированием и результирующим размытием) из части центральной картинки.
    Это достаточно просто - просто берёшь из боковых частей центра куски изображения пропорциональные по размерам с боковыми частями. Будут ли эти кусочки стыковаться боковыми частями по центру вертикалки или нет - зависит от вкуса. На примере они явно не стыкуются. Т.е. примерно так выглядит алгоритм графически:
    60099cbe9f60b561908027.jpeg

    При масштабировании надо размывать картинку, а не копировать дополнительные пикселы, иначе получится мозаичность, а не размытие. На Java (как пример) всё описанное делается элементарно без всяких библиотек, встроенными средствами, в т.ч. и плавное размытие.
  • TeamViewer - нормально ли им ещё пользоваться, какие альтернативы?

    @odissey_nemo
    xmoonlight, да, админы очень её любят, но используют неофициально. В смысле, на свой страх и риск, не беспокоя манагеров.
  • TeamViewer - нормально ли им ещё пользоваться, какие альтернативы?

    @odissey_nemo
    Это всё таки не управление удалённым десктопом(((
  • Как встроить меж страничную рекламу admob?

    @odissey_nemo
    Не делай этого! Реклама - это зло. И пожирает своего демиурга!
  • Как сделать так?

    @odissey_nemo
    Приятное задание. Придаёт уверенности в своих силах)))