• Как преобразовать ArrayList в int[]?

    evgeniy8705
    @evgeniy8705
    Ivan Sokolov: не JVM, но на этапе компиляции все равно происходит авто распаковка. Просто так массив Integer и int, конечно являются разными вещами, но при использовании значений, происходить автоматическое преобразование одного в другое
  • Как преобразовать ArrayList в int[]?

    evgeniy8705
    @evgeniy8705
    MaxLich: При использовании значений из массива, они будут автоматически преобразовываться к примитивному типу.
    К примеру:
    int result = arr[1] + arr[2]; // Unboxing
    int result = Integer.valueOf(arr[1]) + Integer.valueOf(arr[2]); // Что на самом деле происходит


    Просто считайте что это массив примитивных типов.
  • Как преобразовать ArrayList в int[]?

    evgeniy8705
    @evgeniy8705
    MaxLich:
    List<Integer> list = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9));
    Integer[] arr = list.toArray(new Integer[0]);
  • Как в джаве char (в виде символа) преобразовать в string?

    evgeniy8705
    @evgeniy8705
    MaxLich:
    String.valueOf(in.read()); // Возвращает строку с кодом символа

    String.valueOf((char) in.read()); // Возвращает строку c самим символом
  • Как в джаве char (в виде символа) преобразовать в string?

    evgeniy8705
    @evgeniy8705
    Сергей Семенко: Можно разными способами сделать, реализация данного преобразования роли не играет особой.
    String.valueOf((char) in.read)
    Внутри все равно расписано так как я написал. Просто раз ТС задает подобные вопросы, моя реализация думаю будет более наглядной, что во что преобразуется.
  • 2 и 3 строка что делает?можно подробнее?

    evgeniy8705
    @evgeniy8705
    lega:
    let ucFirst = string => {
      if (typeof string === "string") { // Проверка на тип
        return !string ? string : string[0].toUpperCase() + string.slice(1); // Если строка пустая, то вернуть эту строку, т.е пустую стоку. Если строка не пустая, то вернуть новую строку у которой первый символ будет заглавным.
      } else {
        throw new Error(); // Если передана не строка, то выкинуть исключение
      }
    }
    
    console.log(ucFirst(false)); // Error
    console.log(ucFirst(0)); // Error
    console.log(ucFirst({})); // Error
    console.log(ucFirst(12)); // Error
    console.log(ucFirst(NaN)); // Error
    console.log(ucFirst(null)); // Error
    console.log(ucFirst(undefined)); // Error
    
    console.log(ucFirst("string")); // return String


    function ucFirst(str) {
      if (!str) return str;
      
      return str[0].toUpperCase() + str.slice(1);
    }
    
    console.log(ucFirst(false)); // completed, return false
    console.log(ucFirst(0)); // completed, return 0 
    console.log(ucFirst({})); // Error
    console.log(ucFirst(12)); // Error
    console.log(ucFirst(NaN)); // completed, return NaN
    console.log(ucFirst(null)); // completed, return null
    console.log(ucFirst(undefined)); // completed, return undefined
    
    console.log(ucFirst("string")); // return String
  • 2 и 3 строка что делает?можно подробнее?

    evgeniy8705
    @evgeniy8705
    lega: Не нужно вырывать из контекста определенные фразы. Проверит то оно автоматически, но не то что нужно. Будет выявлено только то что возможно оператор доступа [] не будет корректно работать со своим операндом, в частности с переданным аргументом. И утиная типизация тут вообще не причем. Не правильная обработка будет уже при использовании нативного оператора, который в практически в любом случае вернет undefined, а не при использовании метода, который может быть самостоятельно добавлен в объект. Практически в любом случае будет вылетать ошибка TypeError, что не может вызвать метод toUpperCase() у undefined. Пользователю данного метода (а не пользователю интерфейса) при отладке это мало чего даст. А вот сообщение что метод принимает только строки, а передан аргумент другого типа, сразу укажет на первопричину. Все проверки все равно выполняются в runtime, так что, была бы строгая типизация, то другое дело, а здесь приходится самому все отслеживать.
    Тем более что будет если динамически передать в функцию false, 0, NaN, undefined или null? Ошибки никакой не будет и вернуться эти значения, а это не то что ожидает пользователь данной функции.
  • 2 и 3 строка что делает?можно подробнее?

    evgeniy8705
    @evgeniy8705
    lega: Какие еще дженерик функции? В JS нет статической типизации. Тем более не поддерживаются обобщения. Это во первых. А во вторых, в данном случае, конкретно в моей решение, собственноручно обрабатывается проверка, в негативном случае которой выкидывается исключение (в моей случае написал просто Error, но можно вернуть удобочитаемое сообщение об ошибке) , которое будет понятно пользователю.
    По дефолту же, если самому не проверять тип аргумента, то будет выявлена ошибка только на этапе вызова метода toUpperCase(), которая собственно ничего полезного не скажет. На самом же деле первопричиной является передача параметра не того типа, а не вызов метода которого у него может быть и нет.
  • Как перебрать массив getElementsByClassName?

    evgeniy8705
    @evgeniy8705
    Stalker_RED: ну желательно бы не убивать котят. Но все же, создавать просто так объекты не лучшая идея. Быстрее и эффективнее будет использовать методы из прототипа.
  • Как перебрать массив getElementsByClassName?

    evgeniy8705
    @evgeniy8705
    Stalker_RED Array.prototype.forEach.call(document.querySelectorAll('.myClass'), el => {
  • В чем преимущество super, конкретно в данном случае (Обобщения)?

    evgeniy8705
    @evgeniy8705 Автор вопроса
    dummyman: Это мне понятно. Просто если убрать super, то работать будет точно также. Те же самые ограничения будут. В чем преимущество не понятно. В чем плюс этой маски? Почему просто не написали , а написали <? super T>
  • В чем преимущество super, конкретно в данном случае (Обобщения)?

    evgeniy8705
    @evgeniy8705 Автор вопроса
    dummyman что то не уловил сути. Можно поподробнее, к чему вы клоните?
  • В чем преимущество super, конкретно в данном случае (Обобщения)?

    evgeniy8705
    @evgeniy8705 Автор вопроса
    Philipp: Это мне и так понятно. Но если убрать super, то все останется работать точно также. В список кошек я не смогу засунуть Животное. Мне вот это непонятно. Для чего конкретно здесь указан super, в чем его роль именно в этом примере, потому что без него работает абсолютно точно также как и с ним.
  • В чем преимущество super, конкретно в данном случае (Обобщения)?

    evgeniy8705
    @evgeniy8705 Автор вопроса
    Ivan Sokolov: Прочитал, но в общем то не очень помогло. Можете на словах, конкретно на этом примере объяснить
  • Как разобраться с темой кодировок?

    evgeniy8705
    @evgeniy8705 Автор вопроса
    Сергей Так это и есть тест по его лекциям. 2 версии смотрел. Вроде бы много чего рассказывал по этой теме, но все равно мало чего понятно.
  • Почему в фильтре записываются не отфильтрованные байты?

    evgeniy8705
    @evgeniy8705 Автор вопроса
    #алгоптимизируй #отботизируй У меня входные данные либо 0 либо 1. По идеи в файл должны записываться только единицы, фильтруя нули.
    Я подумал, может быть, я когда начинаю записывать данные в файл, и тут же создаю еще один входной поток к этому файлу, начиная выводить все в консоль, возможно такое что проблема из за потоков?
    Я создал 2 отдельных потока, и в них отдельно выполнял запись, а потом чтение из файла. Один поток ждал выполнения другого. Так все нормально работает.

    И как написать фильтр в пару строк?!
    package labs;
    
    import java.io.*;
    import java.util.Arrays;
    
    public class App00 {
        public static void main(String[] args) throws Exception {
            Thread t0 = new Thread(() -> {
                byte[] arr = new byte[10000];
    
                for (int i = 0; i < arr.length; i++) {
                    arr[i] = (byte) (Math.random() * 2);
                }
    
                try (InputStream is = new ByteArrayInputStream(arr); OutputStream fos = new FileOutputStream("c://outfile.txt")) {
                    long startTime = System.nanoTime();
    
                    Filters.zeroFilter(is, fos, 1024);
    
                    long deltaTime = System.nanoTime() - startTime;
    
                    System.out.println("Скорость работы: " + deltaTime);
                } catch (IOException ignore) {
                    // NOP
                }
            });
    
            t0.start();
            t0.join();
    
    
            Thread t1 = new Thread(() -> {
                try (InputStream fis = new FileInputStream("c://outfile.txt")) {
                    int value;
    
                    while ((value = fis.read()) != -1) {
                        System.out.print(value + " ");
                    }
                } catch (IOException ignore) {
                    // NOP
                }
            });
    
            t1.start();
            t1.join();
        }
    }
    
    class Filters {
        public static void zeroFilter(InputStream src, OutputStream dst, int buffSize)  throws IOException {
            try (OutputStream os = new BufferedOutputStream(dst)) {
                final byte STATE_ZERO = 0;
                final byte STATE_NUMBERS = 1;
    
                int count;
                byte[] buffer = new byte[buffSize];
    
                while ((count = src.read(buffer)) != -1) {
                    byte state = STATE_ZERO;
                    int fromIndex = -1;
    
                    for (int index = 0; index < count; index++) {
                        byte elem = buffer[index];
    
                        switch (state) {
                            case STATE_ZERO:
                                if (elem == 0) {
                                    state = STATE_ZERO;
                                } else {
                                    state = STATE_NUMBERS;
    
                                    fromIndex = index;
                                }
    
                                break;
                            case STATE_NUMBERS:
                                if (elem == 0) {
                                    state = STATE_ZERO;
    
                                    os.write(Arrays.copyOfRange(buffer, fromIndex, index));
                                } else {
                                    state = STATE_NUMBERS;
                                }
                        }
                    }
    
                    if (state == STATE_NUMBERS) {
                        os.write(Arrays.copyOfRange(buffer, fromIndex, buffer.length));
                    }
                }
            }
        }
    }
  • Почему в фильтре записываются не отфильтрованные байты?

    evgeniy8705
    @evgeniy8705 Автор вопроса
    Ivan Sokolov: омг ясно все с вами. Проходите мимо.
  • Почему в фильтре записываются не отфильтрованные байты?

    evgeniy8705
    @evgeniy8705 Автор вопроса
    Ivan Sokolov: Разве это не сервис где задаешь вопрос и ждешь что тебе помогут с вопросом? У меня возникла проблема, я задал вопрос. Я про дебаггер могу отвечать на половину вопросов, а в другой половине посылать в гугл. Но тогда толку от это сервиса будет 0. В общем, если нечего дельного ответить, то лучше вообще ничего не пишите. Молча пройдите и все. Если вы не знаете как помочь, это не значит, что и другие такие же недалекие как вы.