• Как удалить ненужные версии JDK?

    xez
    @xez Куратор тега Java
    TL Junior Roo
    Вообще не должны мешать. Но и держать без необходимости кучу версий не стоит.
    Джава живет себе спокойно в одной папке, а все, что в системе о ней известно - путь в path и переменная JAVA_HOME.

    На маке лучший способ управлять Java SDK - использовать https://sdkman.io/
    Ответ написан
    1 комментарий
  • Как удалить ненужные версии JDK?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Не знаю откуда вы сформировали такой отчет.

    С точки зрения современной ОС вы можете хранить много конфигураций JDK/JRE и перключаться между ними просто изменяя PATH/CLASSPATH. Это работает для Linux в основном. Для Windows мне это не удавалось. По крайней мере был еще один способ конфигурирования путей доступа к библиотекам который я на тот момент не знал. Возможно через реестр.

    Чтобы удалить ненужный - нужно знать какие вам нужны. Я-бы оставил только 17 поскольку она LTS (Long Term Support) а все остальные бы удалил если нет других требований.

    Из оставшихся двух версия corretto - разрабатывается и поставляется амазоном на его виртуалки. Поэтому если хостинг покупаете в амазоне то имеет смыл и ее использовать. Но я не вижу JDK это или JRE. Для процесса разработки софта (компилляции) нужна только JDK.
    Ответ написан
    2 комментария
  • Как сохранить аккумулятор MacBook при работе от сети?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    Дарья смотрите цена айра около 79 099 ₽
    Батарейка проработает 2 года гарантировано, дальше поменяете тысяч за 5.
    Так что не парьтесь, тем более через 2-3 года выйдет новый и вы его купите.
    Начинайте относится к компьютерам как к расходникам
    Ответ написан
    Комментировать
  • Как сохранить аккумулятор MacBook при работе от сети?

    @Drno
    Работать при зарядке. На ночь отключать. Можно иногда делать зарядку/разрядку
    Ответ написан
    2 комментария
  • Как сохранить аккумулятор MacBook при работе от сети?

    Включить в настройках режим оптимальной зарядки.
    Лучше Вы не отработаете.
    Оптимум это режим сторедж, порядка 80% от максимум, что и обеспечивает штатный режим оптимизации.
    И не согласен с рекомендацией разряжать регулярно, для литеевых акк это не актуально.
    Ответ написан
    1 комментарий
  • Что нужно изменить, чтобы результат сохранился в текстовый файл как цифры?

    xez
    @xez Куратор тега Java
    TL Junior Roo
    BufferedWriter.write принимает на вход:
    int
    String
    char[]
    и String или char[] с оффсетом и длиной.
    Когда вы скармливаете ему int то в файл попадают натурально байты, вы их и видите в текстовом редакторе.
    Выглядит не очень человекочитаемо, так что запишите туда лучше строку.
    Например, так: writer.write(String.valueOf(maxLength));
    Ответ написан
    6 комментариев
  • Что означает регулярное выражение "(.)\\1*"?

    Alexandroppolus
    @Alexandroppolus
    кодир
    повтор некоторого символа один или более раз.

    символ ловится в скобки (.), далее \1 означает пойманный символ (точнее, то что попалось в первые по счету скобки), и его повторяют.
    Ответ написан
    7 комментариев
  • Есть ли другой алгоритм решения задачи?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Ты используешь регулярку для того чтобы делать разделение английского текста на слова.
    String[] words = verse.toLowerCase().split("[\\s.,?!\\d]+");

    Можно решать другую (обратную) задачу - выделить английские слова которые стартуют с нужных букв.
    И посчитать по регулярке количество найденных групп.
    Ответ написан
    3 комментария
  • Есть ли другой алгоритм решения задачи?

    Если задача "посчитать слова, которые начинаются с буквы", то ты можешь, например, сложить искомые буквы в массив или hashset и делать letters.contains(word[0])
    Ответ написан
    3 комментария
  • Какие параметры передать в format в JAVA?

    @Wan-Derer
    Зобанели на Хабре, волки́ ;((
    Кнопки "сделать хорошо" в Java нет (ну, иногда есть, но не в этот раз)
    Я вижу следующий путь:
    - разбиваешь исходную строку на слова, помещая их в массив (см. методы класса String);
    - создаёшь новую строку (лучше StringBuilder);
    - идёшь по массиву, добавляя слова в новую строку, подсчитывая кол-во добавленных символов;
    - если новое слово не помещается, вставляешь "перенос строки", обнуляешь счётчик и продолжаешь добавлять слова;
    Ответ написан
  • Зачем нужен StringBuilder? В каких случаях нужно использовать StringBuilder? Что мы выиграем используя StringBuilder?

    ayazer
    @ayazer
    Sr. Software Engineer
    смотрите лучше на пример когда у вас 1000 строк по 1мб.

    1000 строк по 1мб = 1Гб выделения памяти при загрузке, и еще (1+1000)/2 * 1000 ~ 500 Гб выделения памяти чтоб хранить промежуточные результаты (2мб сумма первых двух, 3мб сумма первых 3ех, 4мб сумма первых 4...)

    в случае со стрингбилдером у вас будет 1Гб выделения памяти памяти при загрузке + еще 1гб чтоб со всего этого собрать одну мега строку
    Ответ написан
    Комментировать
  • Java. Абстракции, интерфейсы, наследования. Как реализовать?

    @bromzh
    Drugs-driven development
    Определять какой класс использовать надо извне. Для этого есть всякие Factory-паттерны. А проверку внутри абстрактного класса надо убрать.
    А статические методы желательно избегать, хотя в простых factory их можно использовать.

    Список надо параметризировать типом Human, а класс параметризировать как . Или просто использовать везде тип Human, как бы полиформизм для того и придуман.

    UPD
    public interface Human {
        public void jump();
        public void say(String text);
    }
    
    
    public abstract class AbstractHuman implements Human {
        protected String name;
    
        public AbstractHuman(String name) {
            this.name = name;
        }
    
        @Override
        public void say(String text) {
            System.out.println(name + ": " + text);
        }
    }
    
    
    public class Man extends AbstractHuman {
        public Man(String name) {
            super(name);
        }
    
        @Override
        public void jump() {
            System.out.println("Man jump");
        }
    }
    
    
    public class Woman extends AbstractHuman {
        public Woman(String name) {
            super(name);
        }
    
        @Override
        public void jump() {
            System.out.println("Woman jump");
        }
    }
    
    
    public interface HumanFactory {
        public static Human createHuman(String name, boolean kadyk) {
            if (kadyk) {
                return new Man(name);
            }
            return new Woman(name);
        }
    }
    
    import java.util.LinkedList;
    import java.util.List;
    
    public class Main  {
        static class DBData {
            String name;
            boolean kadyk;
            public DBData(String name, boolean kadyk) {
                this.name = name;
                this.kadyk = kadyk;
            }
        }
    
        public static void main(String[] args) {
            List<DBData> source = new LinkedList<>();
            source.add(new DBData("Ваня", true));
            source.add(new DBData("Маша", false));
            source.add(new DBData("Катя", true));
            source.add(new DBData("Сергей", true));
            
            List<Human> humanList = new LinkedList<>();
            
            for(DBData data : source) {
                humanList.add(HumanFactory.createHuman(data.name, data.kadyk));
            }
            
            for(Human human : humanList) {
                human.say("Hello");
                human.jump();
            }
        }
    }
    Ответ написан
    Комментировать