Гость
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Java 8 - уже не совсем Java? / 25 сообщений из 448, страница 1 из 18
15.01.2016, 19:49
    #39148485
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java 8 - уже не совсем Java?
А вполне такой себе приличный язычок программирования, с которым можно жить...

Closable, лямбды, потоки обработки, методы как объекты, отложенные вычисления, автоматическое распараллеливание и прочие вкусности, и вроде бы уже можно попрограммировать чего-то!

Я сегодня написал программу подсчета частоты слов в тексте, заняла примерно 5 строк, и обработала первый том "Войны и мира" за что-то типа секунды.

Прогресс налицо!

Гай Стил, I love you!

----
Читал хинты оракла. Много думал...
...
Рейтинг: 0 / 0
15.01.2016, 20:32
    #39148514
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java 8 - уже не совсем Java?
MasterZivА вполне такой себе приличный язычок программирования, с которым можно жить...
Да, я ссылок на методы много лет ждал. Теперь появился новый способ переиспользовать код не плодя при этом тонны фигурных скобок.

MasterZivClosable

Since 1.5 :)
AutoClosable - Since 1.7

MasterZivавтоматическое распараллеливание

Ага. И при этом плохо управляемое.

MasterZivЯ сегодня написал программу подсчета частоты слов в тексте, заняла примерно 5 строк, и обработала первый том "Войны и мира" за что-то типа секунды.
Тоже тащусь уже несколько месяцев.
...
Рейтинг: 0 / 0
16.01.2016, 09:53
    #39148661
korshun
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java 8 - уже не совсем Java?
MasterZivЯ сегодня написал программу подсчета частоты слов в тексте, заняла примерно 5 строк, и обработала первый том "Войны и мира" за что-то типа секунды.
А можно код увидеть ? Хочется проникнуться вместе с вами :)
...
Рейтинг: 0 / 0
16.01.2016, 10:06
    #39148662
JonnySKS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java 8 - уже не совсем Java?
Я бы тоже хотел посмотреть.
...
Рейтинг: 0 / 0
16.01.2016, 10:41
    #39148669
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java 8 - уже не совсем Java?
MasterZiv, всё. Пропал Илья. Стал на скользкую дорожку...
...
Рейтинг: 0 / 0
16.01.2016, 10:44
    #39148672
grasoff.net
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java 8 - уже не совсем Java?
...
Рейтинг: 0 / 0
16.01.2016, 10:45
    #39148673
grasoff.net
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java 8 - уже не совсем Java?
grasoff.netkorshun, JonnySKS,

http://www.leveluplunch.com/java/examples/count-distinct-word-occurrences-in-file/ ps этот из гугла
...
Рейтинг: 0 / 0
16.01.2016, 13:04
    #39148737
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java 8 - уже не совсем Java?
korshunMasterZivЯ сегодня написал программу подсчета частоты слов в тексте, заняла примерно 5 строк, и обработала первый том "Войны и мира" за что-то типа секунды.
А можно код увидеть ? Хочется проникнуться вместе с вами :)

пошою, конечно...
...
Рейтинг: 0 / 0
17.01.2016, 15:41
    #39149085
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java 8 - уже не совсем Java?
Обещаный код.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import static java.lang.System.out;

import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import java.util.stream.Collector;

public class Main
{
    public static final String WORD_DELIMITERS_REGEX = "[ \\t,.?!:;\"()\\[\\]«»…]+";

    static void printDictionary(String name, Map<String, Integer> c)
    {
        if (c.isEmpty())
            out.printf("Dictionary '%s' is empty.\n", name);
        else
        {
            Iterator<String> i = c.keySet().iterator();
            out.printf("Dictionary '%s':\n", name);
            while (i.hasNext())
            {
                String k = i.next();
                out.printf("\t%s[%s] == %d\n", name, k, c.get(k));
            }
        }
    }

    public static void main(String[] args)
    {
        try
        {
            //Map<String, Integer> words =
            printDictionary( "words",
                    Files.lines(Paths.get("text.txt"))
                    .filter( s -> !s.isEmpty() )
                    .flatMap( (String s) -> Arrays.stream( s.split(WORD_DELIMITERS_REGEX) ) )
                    .filter( s -> !s.isEmpty() )
                    .map( String::toLowerCase )
                    .collect(
                            Collectors.toMap(
                                                k -> (String)k,
                                                k -> new Integer(1),
                                                (Integer v1, Integer v2) -> new Integer( v1.intValue() + v2.intValue() )
                                            )
                            )
            );
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }

    }
}
...
Рейтинг: 0 / 0
17.01.2016, 16:20
    #39149097
dmitriyche
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java 8 - уже не совсем Java?
MasterZiv,

Если уж использовать Java 8, то только на полную катушку
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
import java.io.BufferedReader;
import java.io.FileReader;
import java.util.Arrays;
import java.util.Map;
import java.util.stream.Collectors;

import static java.lang.System.out;

public class Main {
    public static final String WORD_DELIMITERS_REGEX = "[ \\t,.?!:;\"()\\[\\]«»…]+";

    static void printDictionary(String name, Map<String, Integer> c) {
        if (c.isEmpty()) {
            out.printf("Dictionary '%s' is empty.\n", name);
        } else {
            out.printf("Dictionary '%s':\n", name);
            c.forEach((word, count) -> out.printf("\t%s[%s] == %d\n", name, word, count));
        }
    }

    public static void main(String[] args) {
        try (BufferedReader reader = new BufferedReader(new FileReader("text.txt"))) {
            printDictionary("words",
                    reader.lines()
                            .filter(line -> !line.isEmpty())
                            .flatMap(line -> Arrays.stream(line.split(WORD_DELIMITERS_REGEX)))
                            .filter(word -> !word.isEmpty())
                            .map(String::toLowerCase)
                            .collect(
                                    Collectors.toMap(
                                            word -> word,
                                            word -> 1,
                                            (count1, count2) -> count1 + count2
                                    )
                            )
            );
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}
...
Рейтинг: 0 / 0
17.01.2016, 17:12
    #39149107
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java 8 - уже не совсем Java?
Воинствующий во мне бюрократ не удержался и накатил патчик.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.*;
import java.util.stream.Collectors;

public class Main
{
    public static final String WORD_DELIMITERS_REGEX = "[ \\t,.?!:;\"()\\[\\]«»…]+";

    static void printf(String format,Object ...args){
        System.out.printf(format,args);
    }

    static void printDictionary(String name, Map<String, Integer> c)
    {
        if (c.isEmpty())
            printf("Dictionary '%s' is empty.\n", name);
        else
        {
            // Mayton: refactoring with Map.Enty
            Iterator<Map.Entry<String,Integer>> i = c.entrySet().iterator();
            printf("Dictionary '%s':\n", name);
            while (i.hasNext())
            {
                Map.Entry<String,Integer> entry = i.next();
                printf("\t%s[%s] == %d\n", name, entry.getKey(), entry.getValue());
            }
        }
    }

    public static void main(String[] args)
    {
        try
        {
            //Map<String, Integer> words =
            printDictionary("words",
                    // Mayton: I've got a charset error during process mixed-encoded files.
                    Files.lines(Paths.get("text-utf8.txt"), Charset.forName("utf-8"))
                            .filter(s -> !s.isEmpty())
                            // TODO: (mayton) Get rid String::split (with regexps). Apache Commons Utils 'split()' is better.  
                            .flatMap((String s) -> Arrays.stream(s.split(WORD_DELIMITERS_REGEX)))
                            .filter(s -> !s.isEmpty())
                            .map(String::toLowerCase)
                            .collect(
                                    Collectors.toMap(
                                            k -> (String) k,
                                            k -> 1,
                                            // Mayton: I do not know what is it, but autoboxing is works!
                                            (Integer v1, Integer v2) -> (v1 + v2)
                                    )
                            )
            );
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }

    }
}
...
Рейтинг: 0 / 0
17.01.2016, 17:13
    #39149108
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java 8 - уже не совсем Java?
А пока писал кто-то уже опередил.
...
Рейтинг: 0 / 0
17.01.2016, 19:06
    #39149143
ART-CODE
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java 8 - уже не совсем Java?
автоматическое распараллеливание
Можно спросить - что под этим подразумевается ?
Выполнение в несколько потоков?
Выполнение на нескольких компьютерах ?
В этом коде распараллеливание где-то происходит?
В какой строке?

На С++ та же задача вычисляется за то же время или быстрее/медленнее ?
Понятно, что это тест, но на мой вкус, подсчет частоты слов - вообще для SQL сервера задача.
...
Рейтинг: 0 / 0
17.01.2016, 19:17
    #39149149
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java 8 - уже не совсем Java?
Наверное речь идёт о Collections.parallelStream и ему подобном API. Но у меня
есть сомнения что это будет полезно для 99% софта. Он практически весь - последовательный
по своей природе. А оставшийся один процент надо еще суметь правильно распараллелить.
Старик Амдал хохочет над нами.

Практически сегодня когда говорят о параллелизме в Java-development - подразумевают
способность задачи прогружаться в контейнеры Hadoop или Spark. Со всеми вытекающими.
Тоесть и датасорс тоже должен параллелиться. Лежать на специальных БД или в специальных ФС.
...
Рейтинг: 0 / 0
17.01.2016, 20:06
    #39149155
ART-CODE
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java 8 - уже не совсем Java?
mayton,
Спасибо, вот и я о том же подумал: "а как же данные?"
а оно вон как оказывается - HDFS же :)
...
Рейтинг: 0 / 0
17.01.2016, 21:02
    #39149175
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java 8 - уже не совсем Java?
Нет. Чтоб гонять параллельные алгоритмы - HDFS не обязателен.
Но если взять наш конкретный пример - чтение текста с подсчётом
слов то ему опция параллелизма не даёт ничего.

Пожалуй если мы "Войну и Мир.txt" прогрузим в heap - возможно
и будет какой-то выигрыш но сам момент этой загрузки всё равно - последовательный
и мы будем заниматься самообманом, рассказывая всем что
сумели распараллелить задачу.

P.S. Старый Джин помер 10 ноября 2015 года. И теперь смеётся над нами
уже из могилы.
...
Рейтинг: 0 / 0
18.01.2016, 00:39
    #39149239
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java 8 - уже не совсем Java?
ART-CODEавтоматическое распараллеливание
Можно спросить - что под этим подразумевается ?
Выполнение в несколько потоков?
Выполнение на нескольких компьютерах ?
В этом коде распараллеливание где-то происходит?
В какой строке?

На С++ та же задача вычисляется за то же время или быстрее/медленнее ?
Понятно, что это тест, но на мой вкус, подсчет частоты слов - вообще для SQL сервера задача.

в этом уже нет параллельного вычисления.
...
Рейтинг: 0 / 0
18.01.2016, 11:37
    #39149442
booby
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java 8 - уже не совсем Java?
maytonНаверное речь идёт о Collections.parallelStream и ему подобном API. Но у меня
есть сомнения что это будет полезно для 99% софта. Он практически весь - последовательный
по своей природе. А оставшийся один процент надо еще суметь правильно распараллелить.
Старик Амдал хохочет над нами.

Практически сегодня когда говорят о параллелизме в Java-development - подразумевают
способность задачи прогружаться в контейнеры Hadoop или Spark. Со всеми вытекающими.
Тоесть и датасорс тоже должен параллелиться. Лежать на специальных БД или в специальных ФС.
+-
в том смысле, что "не совсем Java", как и С++ уже "не совсем C++"
(А Хадуп, СПАРК и тп - это мимо кассы в данном моменте.)
Амдал хохочет, это да, причем и громко и сочно.
Но там где "зашитый" параллеллизм сейчас вьют, со всем уважением к Амдалу, думают об опечалившемся Муре - уперлась производительность транзисторов в 3 Мгц без водяного охлаждения и 5 Мгц с ним.
Потому Мур теперь живет методом удвоения числа процессорных ядер.

Это подстава, которую надо чем-то грузить, чтобы хоть как-то оправдать потраченные покупателем деньги на смартфона последней модели.
Вот оно и прорастаем многоветочно, то в виде parallelStram, то в виде compleatableFuture.

Это совсем другое программирование. Оно, конечно, чистосердечное большое спасибо за сокрытие всех кишков в обновленных рантаймах и вновь переписанных библиотеках.
Приседец здесь в том, что даже метод сокрытия алгоритмов в целях обеспечения "безопасного" языка не гарантирует правильности результата, который будут формировать те три исключительно красивые строчки, от которых неделями будет тащиться сотворивший их автор.
Даже если тебе на кухне запретили пользоваться ножами и топорами, выдав вместо них электрическую мясорубку, желательно все же понимать, что в ея нутре тоже есть ножи и совать в нея пальцы вместе с мясом не рекомендуется.
...
Рейтинг: 0 / 0
18.01.2016, 12:36
    #39149512
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java 8 - уже не совсем Java?
Уменьшил код, выбросил лишнее, но добавил новые проверки и вывод, ранжированный по частоте употребления слова.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
import static java.lang.System.out;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.*;
import java.util.stream.Collectors;

public class Main
{
    static final String WORD_DELIMITERS_REGEX = "[ \\t,.?!:;\"()\\[\\]«»…]+";
    static final ArrayList<String> nonWords = new ArrayList<>( Arrays.asList("-", "–") );

    static void printDictionary(String name, Map<?, ?> c) // функция не используется.
    {
        out.printf( c.isEmpty() ? "Dictionary '%s' is empty.\n" : "Dictionary '%s':\n", name);
        c.forEach( (k,v) -> out.printf("\t%s[%s] == %d\n", name, k, v ) );
    }

    static void printDictionarySortedByValue(String name, Map<?, Integer> c)
    {
        out.printf( c.isEmpty() ? "Dictionary '%s' is empty.\n" : "Dictionary '%s':\n", name);
        c.entrySet()
         .stream()
         .sorted( (e1, e2) -> e2.getValue()-e1.getValue() )
         .forEach( e -> out.printf("\t%s[%s] == %d\n", name, e.getKey(), e.getValue() ) );
    }

    public static void main(String[] args)
    {
        try
        {
            //Map<String, Integer>
            printDictionarySortedByValue( "words",
                    Files.lines(Paths.get("text.txt"))
                    .flatMap( s -> Arrays.stream( s.split(WORD_DELIMITERS_REGEX) ) )
                    .filter( s -> !s.isEmpty() && !nonWords.contains(s) )
                    .map( String::toLowerCase )
                    .collect( Collectors.toMap( k -> k, k -> 1, (v1, v2) -> v1 + v2 ) )
            );
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }
}
...
Рейтинг: 0 / 0
18.01.2016, 12:46
    #39149530
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java 8 - уже не совсем Java?
Коллективный разум зудит во мне...

Код: java
1.
static final List<String> nonWords = Arrays.asList("-", "–");
...
Рейтинг: 0 / 0
18.01.2016, 13:16
    #39149567
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java 8 - уже не совсем Java?
MasterZivУменьшил код, выбросил лишнее, но добавил новые проверки и вывод, ранжированный по частоте употребления слова.
Ваше форматирование никуда не годится. Кортит меня и про код вообще написать. Но не буду.
...
Рейтинг: 0 / 0
18.01.2016, 13:37
    #39149590
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java 8 - уже не совсем Java?
BlazkowiczMasterZivУменьшил код, выбросил лишнее, но добавил новые проверки и вывод, ранжированный по частоте употребления слова.
Ваше форматирование никуда не годится. Кортит меня и про код вообще написать. Но не буду.

Форматирование не моё лубимое кое-где, но -- да, Java-style я лично не приемлю вообще никак.
Так что если про это -- идите в пень.

Про код -- пиши, пожалуйста.
Это не rocket science, а эксперементальная программулька.
...
Рейтинг: 0 / 0
18.01.2016, 13:38
    #39149592
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java 8 - уже не совсем Java?
maytonКоллективный разум зудит во мне...

Код: java
1.
static final List<String> nonWords = Arrays.asList("-", "–");



Ну, и чё он зудит-то ?
...
Рейтинг: 0 / 0
18.01.2016, 13:53
    #39149614
Сергей Арсеньев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java 8 - уже не совсем Java?
mayton // Mayton: I do not know what is it, but autoboxing is works!
(Integer v1, Integer v2) -> (v1 + v2)

Что-то типа Integer.valueOf(v1.intValue() + v2.intValue()), если я правильно понимаю
...
Рейтинг: 0 / 0
18.01.2016, 13:53
    #39149615
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java 8 - уже не совсем Java?
MasterZivФорматирование не моё лубимое кое-где, но -- да, Java-style я лично не приемлю вообще никак.
Убрал переносы - ещё не значит сделал код короче.
MasterZivТак что если про это -- идите в пень.
Взаимно.
MasterZivПро код -- пиши, пожалуйста.
Это не rocket science, а эксперементальная программулька.
Ок. Зачем такая заумная регулярка вместо \p{Punct}, \w, \s?
Зачем собирать в мапу, чтобы потом снова конвертить её в стрим?
Инлайнить огромные куски кода в аргумент это не красиво и не удобно для отладки.
Зачем плодить новый Stream для каждой строки, если можно было бы сразу парсить текст на слова и стримить (Scanner, Splitterator, StreamSupport)
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Java 8 - уже не совсем Java? / 25 сообщений из 448, страница 1 из 18
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]