Ответы пользователя по тегу Java
  • Как из Flux собрать массив JSON?

    @Wan-Derer Автор вопроса
    Зобанели на Хабре, волки́ ;((
    Если кому интересно, придумал такой костыль:
    Flux<String> items = ... здесь исходный Flux ... ;
    Flux<Integer> numbers = Flux.generate(
      () -> 0,
      (state, sink) -> {
        sink.next(state);
        return state + 1;
      }
    );
    
    items.zipWith(numbers, (i,n) -> n + i)
      .map(item-> item.replace("0{", "{").replaceFirst("^[0-9]+", ", "))
      .startWith("[")
      .concatWithValues("]")
      .subscribe(System.out::println);


    Т.е. мы сначала к каждой строке пририсовываем последовательный номер. Потом первый номер (0) просто затираем, а остальные меняем на запятую. Ну и потом оборачиваем всё квадратными скобками.
    Не знаю насколько это хорошо, но работает :)
    Ответ написан
    Комментировать
  • Как в Reactor запускать параллельные запросы?

    @Wan-Derer Автор вопроса
    Зобанели на Хабре, волки́ ;((
    Нашёл аналогичный вопрос :)

    Кому интересно, решение:

    public class Test {
    
      static Mono<String> getFromHttp() {
        return Mono.just("from HTTP").delayElement(Duration.ofSeconds(2));
      }
    
      static Mono<String> getFromDb() {
        return Mono.just("from DB").delayElement(Duration.ofSeconds(1));
      }
    
      public static void main(String[] args) {
    
        String fromHttp = "---";
        String fromDb = "===";
    
        long start = System.currentTimeMillis();
    
        Mono<String> httpReq = getFromHttp();
        Mono<String> dbReq = getFromDb();
    
        Tuple2<String, String> values = Mono.zip(httpReq, dbReq).block();
        fromHttp = values.getT1();
        fromDb = values.getT2();
    
        System.out.println(System.currentTimeMillis() - start);
        System.out.println(fromHttp);
        System.out.println(fromDb);
      }
      
    }
    Ответ написан
    Комментировать
  • Java. Ссылка Класс::МетодЭкземпляра. Как реализовать метод?

    @Wan-Derer
    Зобанели на Хабре, волки́ ;((
    Вроде как и с нестатическими получается:
    public class Test {
    
      public static void main(String[] args) {
        
        MyClass myClass = new MyClass();
    
        Stream.generate(ToProcess::new).limit(10).map(myClass::process);
        
      }
      
    }
    
    
    class MyClass{
      ToProcess process(ToProcess obj){
        // processing
        return obj;
      }
    }
    
    
    class ToProcess {
    }

    По крайней мере, IDE-шка ошибок не даёт :)
    Ответ написан
    3 комментария
  • Как тестировать работу Service класса с базой данных или как сравнить два JPA entity объекта в тестах?

    @Wan-Derer
    Зобанели на Хабре, волки́ ;((
    Когда ты реализуешь equals() и hashCode(), логику этих методов ты определяешь сам, тебе не обязательно сравнивать все поля. Сравнивать то что тебе надо и так как надо - хоть фазу Луны со спином ретроградного Меркурия.
    Ответ написан
    Комментировать
  • Какие виды и специализации Java программистов бывают?

    @Wan-Derer
    Зобанели на Хабре, волки́ ;((
    Основные направления тебе перечислили, немного дополню.
    - есть очень сложный и очень старый энтерпрайз, например, банки. Бывают написаны на очень старой Java, говорят, даже 5 встречается :) Охренеть какая сложная предметная область. Тебе могут дать задание написать или исправить класс, а ты вообще в душе не шаришь что это и зачем. И так всю жизнь :)
    - есть системы типа SAP, которые надо не писать, а адаптировать под конкретного заказчика типа Аэрофлота. Делается это путём прописывания логики работы уже готовой системы, а также написания своих плагинов, в т.ч. на Java.

    Ну а если тебе нужен универсальный совет, то вот он:
    - не знаешь что учить - учи Spring, вакансии не дадут соврать;
    - обязательно познакомься с SQL - чтобы понимать не только JPA, но и "голые" запросы и уметь хотя бы немного в их оптимизацию;
    - познакомься с фронтендом на базе фреймворка, самый популярный React, хотя бэкендерам лучше заходит Angular. Это позволит на практике понять как происходит взаимодействие бэк-фронт, ну и вообще - расширит сознание :)

    С таким стэком и (желательно) домашним проектом искать работу будет легче и веселее :)
    Удачи!
    Ответ написан
    1 комментарий
  • Что делать, если я захожу на майнкрафт сервер и мне выдает эту ошибку?

    @Wan-Derer
    Зобанели на Хабре, волки́ ;((
    Что с этим делать?

    Прекратить играться и заняться наконец каким-то полезным делом.
    Ответ написан
    Комментировать
  • Как в Reactor Netty отправить файл?

    @Wan-Derer Автор вопроса
    Зобанели на Хабре, волки́ ;((
    Оставлю таблетку для памяти :) Так работает:

    // GET /api/reports/download/{id}
    public Publisher<Void> download(HttpServerRequest req, HttpServerResponse resp) {
    
      try {
        String filePath = reportService.getFilePath(Integer.parseInt(req.param("id")));
    
        if (filePath == null) return resp.status(HttpResponseStatus.NOT_FOUND);
    
        Path file = Path.of(filePath);
        String filename =
          URLEncoder.encode(file.getFileName().toString(), StandardCharsets.UTF_8).replace("+", "%20");
    
        return resp
          .status(HttpResponseStatus.OK)
          .addHeader(ACCESS_CONTROL_ALLOW_ORIGIN, "*")     // CORS
          .addHeader(ACCESS_CONTROL_EXPOSE_HEADERS, "filename")
          .addHeader("filename", filename)
          .addHeader(CONTENT_TYPE, "application/octet-stream")
          .sendFileChunked(file, 0, file.toFile().length())     // or Files.size(file) ??
          ;
    
      } catch (Exception e) {
        return getErrorResponse(resp, e);
      }
    }
    Ответ написан
    Комментировать
  • Как перекодировать строки из windows 1251 в читаемый вид в java?

    @Wan-Derer
    Зобанели на Хабре, волки́ ;((
    Так получилось :)
    String a = new String("Øêàô ðàñïðåäåëèòåëüíûé îáðàçåö".getBytes("Windows-1252"), "Windows-1251");
    Ответ написан
    Комментировать
  • Как парсить imap4rev1, FETCH Response, message data?

    @Wan-Derer
    Зобанели на Хабре, волки́ ;((
    Я делал приём писем на обычном клиенте: https://jakarta.ee/specifications/mail/2.0/jakarta...
    Вроде, не так сложно получилось :)
    Почему-то оказалось что фреймворки не любят приём писем, в них в основном только отправка, пришлось делать руками :)
    Ответ написан
    2 комментария
  • Как сделать только допустимые символы в переменную?

    @Wan-Derer
    Зобанели на Хабре, волки́ ;((
    Например, регуляркой:
    String a = "123-qwe-абв";
    
    String b = a.replaceAll("[^A-Za-z0-9]", "");
    
    System.out.println(a);
    System.out.println(b);
    Ответ написан
    Комментировать
  • Почему лямбда не работает, хотя версия джавы должна это позволять?

    @Wan-Derer
    Зобанели на Хабре, волки́ ;((
    Поставь Language Level "соответствующий SDK".
    На вкладке Modules тоже проверь.
    В Settings - Build, Execution... - Java Compiler тоже.
    Ну и настройках сборщика.
    Ответ написан
    Комментировать
  • Почему в Kotlin (а может и в Java) так много методов?

    @Wan-Derer
    Зобанели на Хабре, волки́ ;((
    часть методов появляется из-за строгой типизации: для разных типов приходится писать разные методы

    Нет. В Java каждый объект имеет конкретный тип, поэтому у него не может быть методов для разных типов :)
    String - тип очень распространённый, с ним много работы, поэтому в Java сочли необходимым прикрутить к нему ряд методов, максимально их оптимизировав. И я бы не сказал что их много. М.б. так кажется глядя на список, выдаваемый IDE, но там много перегруженных методов: с одинаковым именем, но с разными аргументами. Плюс есть статические методы у класса String. Плюс есть специальные классы StringBuilder/StringBuffer, там есть свои методы, видимо, народ просил :)
    То же относится к массивам - всё ради скорости!
    В Котлин же всё свалили в кучу, в т.ч. то что в Java делается циклами или через Stream API, поэтому кажется что методов до фига много. На самом деле, это просто "синтаксический сахар", когда в одно действие сводится несколько.
    Просто считай что Java "более низкоуровневая" чем Питон. Пользуйся теми методами что тебе нужны здесь и сейчас. Остальные пригодятся со временем.
    Ответ написан
    Комментировать
  • Как можно перевести результаты запроса в POJO в JPA?

    @Wan-Derer
    Зобанели на Хабре, волки́ ;((
    По-моему, тут либо с Entity, либо без JPA :)
    Ответ написан
    Комментировать
  • Как объединить 2 списка стримом так, чтобы итоговый результат включал в себя одни параметры из первого списка, а другие из второго списка?

    @Wan-Derer
    Зобанели на Хабре, волки́ ;((
    М.б. так?
    import lombok.Getter;
    import lombok.Setter;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class test {
    
      public static void main(String[] args) {
        List<Item> listA = new ArrayList<>();
        List<Item> listB = new ArrayList<>();
    
        List<Item> coupled = couple(listA, listB);
    
      }
    
      static List<Item> couple(List<Item> listA, List<Item> listB){
        return listA.stream()
          .peek(itemA -> {
            Item complimentary = listB.stream().filter(itemB -> itemB.getId() == itemA.getId()).findFirst().orElse(null);
            if (complimentary == null) throw new IllegalArgumentException("Can't find pair");
            itemA.setLow(complimentary.getLow());
          })
          .toList();
      }
    }
    
    
    @Getter
    @Setter
    class Item{
      private int id;
      private int low;
      private int high;
    }


    НО! Если элементов много то быстродействие будет ни к чёрту :)
    Ответ написан
    Комментировать
  • Как добавить в feign client url из .properties?

    @Wan-Derer
    Зобанели на Хабре, волки́ ;((
    Не очень понятно: проект на Spring? Если да, то:
    1. Прочитать файл. Сделать MAP, выгрузить его в контекст через @ Bean. Если без Spring, то то же самое, но вместо бина сделать синглтон и к нему обращаться, получится что-то вроде глобальных констант.
    2. Сделать application.properties (по-моему, они могут работать параллельно с .YML, но это надо проверить) и подключить туда другие .properties. @ Value будет работать.
    Ответ написан
  • Как правильно построить бесконечное соединение?

    @Wan-Derer
    Зобанели на Хабре, волки́ ;((
    Могу предположить что речь идёт о сокетах.
    Ответ написан
    Комментировать
  • Как сделать маппинг если используется три таблицы?

    @Wan-Derer
    Зобанели на Хабре, волки́ ;((
    Вроде как, связывание через третью таблицу используется только для варианта many-to-many
    https://www.baeldung.com/jpa-many-to-many
    Ответ написан
    2 комментария
  • Как почитать строку в java?

    @Wan-Derer
    Зобанели на Хабре, волки́ ;((
    Например, перебирая посимвольно с помощью цикла и метода String.charAt().
    И лучше выбрать другое имя для метода калькулятора.
    Ответ написан
    3 комментария
  • В чём здесь различие?

    @Wan-Derer
    Зобанели на Хабре, волки́ ;((
    В консоли ты запускаешь команду из папки с Java или туда проброшен путь с помощью переменной окружения PATH.
    А программа смотрит туда куда указывает переменная JAVA_HOME.
    Набери echo %JAVA_HOME%
    Ответ написан
    Комментировать
  • Как взаимодействовать с элементами HashMap типа Long, занести значение в другую переменную?

    @Wan-Derer
    Зобанели на Хабре, волки́ ;((
    Для начала расскажи шо цэ тэкэ:
    doc['extra.records_count'].value
    на синтаксис Java это вообще не похоже.
    В Java с квадратными скобками - это массив, внутри скобок - индекс массива (индекс имеет тип int). Поля value у массива нет. Одинарными кавычками обозначают char (одиночный символ).

    Если doc - это HashMap, а extra.records_count - переменная типа long, то доставать значение надо так:
    // вместо String подставь тот тип, в котором хранятся value в мапе
    String value = doc.get(extra.records_count);


    И ещё. В Java по правилам переменные именуются кэмэл-кейсом, т.е. не rec_count, а recCount.
    Ответ написан