• Как использовать SAX-парсер для сохранения только дочерних элементов и хранение их в коллекции?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Java
    Седой и строгий
    import java.io.IOException;
    
    import java.util.List;
    import java.util.ArrayList;
    
    import javax.xml.parsers.SAXParser;
    import javax.xml.parsers.SAXParserFactory;
    import javax.xml.parsers.ParserConfigurationException;
    import org.xml.sax.Attributes;
    import org.xml.sax.SAXException;
    import org.xml.sax.helpers.DefaultHandler;
    
    class Department {
        private String number;
        private String name;
        private List<Integer> products;
    
        public Department(String number, String name) {
            this.number = number;
            this.name = name;
            this.products = new ArrayList<>();
        }
        
        public void setProducts(List<Integer> products) {
            this.products = products;
        }
        
        public String toString() {
            return String.format("Name: %s\nNumber: %s\nProducts: %s\n", name, number, products);
        }
    }
    
    public class SAXHandler extends DefaultHandler {
        private List<Department> departments;
        private List<Integer> products;
        private Department currentDepartment;
        
        public SAXHandler() {
            this.departments = new ArrayList<>();
        }
        
        public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
            if(qName.equals("department")) {
                String name = attributes.getValue("name");
                String number = attributes.getValue("number");
                
                products = new ArrayList<>();
    
                currentDepartment = new Department(name, number);
            }
            
            if(qName.equals("product")) {
                String id = attributes.getValue("id");
                products.add(Integer.valueOf(id));
            }
        }
        
        public void endElement(String uri, String localName, String qName) throws SAXException {
            if(qName.equals("department")) {
                currentDepartment.setProducts(products);
                departments.add(currentDepartment);
            }
    	}
        
        public List<Department> getResult() {
            return departments;
        }
    
        public static void main(final String args[]) {
            try {
                SAXParserFactory factory = SAXParserFactory.newInstance();
                SAXParser saxParser = factory.newSAXParser();
        
                SAXHandler handler = new SAXHandler();
                saxParser.parse("test.xml", handler);
            
                handler.getResult().stream().forEach(System.out::println);
            }
            catch(SAXException ex) {}
            catch(ParserConfigurationException ex) {}
            catch(IOException ex) {}
        }
    }
    Ответ написан
    4 комментария
  • Выбор коллекции при парсинге XML?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Java
    Седой и строгий
    Я бы выгребал в HashMap, в котором ключами были бы значения атрибута name, а значениями атрибута size.

    Map<String, String> attrs = new HashMap<>();
    
    @Override
    public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
        String name = attributes.getValue("name");
        String value = attributes.getValue("size");
        attrs.put(name, value);
    }
    Ответ написан
    2 комментария
  • Приведите примеры частных политик ИБ?

    MaxDukov
    @MaxDukov
    впишусь в проект как SRE/DevOps.
    Политика предоставления доступа к информационным активам. Политика ИБ в области персданных. Политика ИБ при работе с ЭП.
    откройте СТО БР ИББС - там про это целый раздел.
    Ответ написан
    2 комментария
  • Как создать java web-приложения с нуля?

    TerraMorf
    @TerraMorf
    Java Andriod developer
    Комментировать
  • Какую СУБД используют программисты JAVA EE?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Да, практически все используют, начиная от sqlite, h2, mysql, postgres и заканчивая oracle, sybase, mssql, teradata и прочими радостями жизни.
    Весь вопрос - подключить правильный драйвер, да для генерации указать диалект.
    Ну а базу выбирают под задачу, также под задачу и переезжают с одних баз данных на другие.
    У меня в свое время в проекте аж одновременно три базы использовалось hsql, mysql и sybase.
    Ответ написан
    Комментировать
  • Чем наследования (extends) отличается от создания новых экземпляров классов (new)?

    Denormalization
    @Denormalization
    Класс Car - это трафарет.

    Оператор new - это создание ИЗДЕЛИЯ по этому трафарету
    extends - это создание нового трафарета (возможно с дополнениями) по которому можно создавать изделия.

    Между созданием изделия и создание нового трафарета есть разница?
    Ответ написан
    Комментировать
  • Чем наследования (extends) отличается от создания новых экземпляров классов (new)?

    abs0lut
    @abs0lut
    Ваш пример не содержит кода, поэтому он не корректный.
    Что если мы напишем так:
    class Vehicle {
        public speedUp (int newSpeed) {
            speed = newSpeed;
        }
    }
    
    class Car extends Vehicle {
        private boolean opened = false;
        public void openDoor {
            opened = true;
        }
    }
    
    class Tank extends Vehicle {
        private ammo = 10;
        public void fire(Vehicle enemy) {
            ammo -= 1;
        }
    }


    Будет более явно видно, зачем нужно наследование. Теперь в классе Tank и в классе Car не нужно описывать отдельно одинаковые методы, так как они вынесены в общий суперкласс.

    Класс - шаблон для объектов. Он определяет то, чем характеризуются объекты (поля) и то, как они себя ведут(методы). Внутри класса мы описываем его методы и поля, но для их использования нужно создать экземпляры класса - объекты.

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

    TL;DR
    В результате наследования получаем более простой и короткий код. В результате создания объектов получаем возможность оперировать данными объекта.

    p.s. почитайте книгу какую нибудь, где будут описаны простые примеры инкапсуляции, полиморфизма и наследования. Например, "Head First Java". Или можете обратиться к мини-курсу от Oracle - Oracle tutorial
    Ответ написан
    4 комментария
  • Можете сформулировать что такое синхронный последовательный интерфейс?

    saboteur_kiev
    @saboteur_kiev Куратор тега Компьютерные сети
    software engineer
    Доступным языком не все вещи можно описать. Для этого следует просто минут 15 почитать несколько статей, и тогда все будет понятно.
    Попробуй доступным языком пояснить что такое зеленый свет слепому человеку? Тебе придется углубиться в непроходимые дебри терминологии и описания базовых вещей. Так и тут - если тебе непонятен смысл самого названия (то есть ты не понимаешь что означают слова синхронность, последовательность, интерфейс), то простыми понятными словами не выйдет.

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

    @mureevms
    Простите, но это сферический в вакууме. Вся прочитанная теория, в данном случае, не будет стоить ни чего. Только время потратите. Нужна практика на реальных задачах. Их можно и смоделировать, если нет рабочих. Читайте, в конце концов, тостер по интересующим тегам, смотрите что люди делают, как это делают и пытайтесь повторить.
    Вы пишите про VPN. Возьмите, и поднимите его сначала на винде, потом на линуксе. В процессе будет приходить понимание как это работает и для чего вообще нужно.
    Поднимите машину на винде и линуксе (по очереди, конечно) и раздайте с нее интернет в локальную сеть.
    Это будет реальный опыт, хоть и в тестовой среде, и принесет гораздо больше, чем просто чтение без понимания.
    Ответ написан
    Комментировать
  • Что нужно сделать в фирме безопаснику, если его должность только открылась и никакой почвы для этого нет?

    eapeap
    @eapeap
    Сисадмин, Беларусь
    что нужно сделать в первую очередь

    Попить пива с админом.
    Ответ написан
    Комментировать