среда, 22 февраля 2017 г.

Java 8 example: two String arrays to one Set with Streams


Just an example


@Test
public void testArraysToStream() {
    String[] s1 = null;
    String[] s2 = null;
    Set<String> res = Stream.of(s1, s2)
                .filter(Objects::nonNull)  // <-- Filter out null values
                .flatMap(Stream::of)
                .collect(Collectors.toSet());
    Assert.assertNotNull(res);
    Assert.assertEquals(0,res.size());


    s1 = new String[]{"1","2"};
    Set<String> res2 = Stream.of(s1, s2)
                .filter(Objects::nonNull)  // <-- Filter out null values
                .flatMap(Stream::of)       // two arrays to one stream
                .collect(Collectors.toSet());
    Assert.assertNotNull(res2);
    Assert.assertEquals(2,res2.size());
    s2 = new String[]{"3","4"};
    Set<String> res3 = Stream.of(s1, s2)
                .filter(Objects::nonNull)  // <-- Filter out null values
                .flatMap(Stream::of)       // two arrays to one stream
                .collect(Collectors.toSet());
    Assert.assertNotNull(res3);
    Assert.assertEquals(4,res3.size());
    Assert.assertNotNull(res3.iterator().next());
}

вторник, 7 февраля 2017 г.

Что такое стратегия использования SVN

    На днях коллега поинтересовался - какая стратегия SVN используется у нас при работе с хранилищем. Ответить было нечего, так как это понятие начисто стёрлось у меня из памяти. Хотя как выяснилось при дальнейшем поиске информации, я об этом когда-то читал.
    Смысл термина "стратегия использования SVN" в том, как именно в хранилище sVN именуются каталоги(branches и tags) проекта, а также когда и куда сливаются(merge) ветки.

    Описание типового шаблона из руководства svn: SVN.Ветвление и слияние.Типовые примеры
    Хорошее простое изложение с примерами можно посмотреть тут: Стратегии использования SVN

    Я для себя сформулировал смысл так:

    Простой случай (то, что используется у нас):
- для ошибок и фич создаётся branch, и потом эта ветка сливается в trunk;
- при фиксации, создаётся tag.

    Более сложный случай (как-раз описан в руководстве svn):
- для релиза создаётся branch (1.x-stable);
   -- здесь правятся ошибки этого релиза
   -- для каждой передачи всё фиксируется в tags (1.x.1, 1.x.2)
   -- всё сливается в trunk
- для новых фич создаётся новая ветка (1.(x+1))
   -- здесь ведётся разработка новой функциональности
   -- сюда сливается всё из trunk (чтобы попали исправления ошибок из релизов)
   -- в конце эта ветка сливается в trunk
   -- на основе trunk после этого создаётся новый tags/1.(x+1)
 
Для себя сделал ещё напоминающую табличку: