powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Java 8 - уже не совсем Java?
25 сообщений из 448, страница 1 из 18
Java 8 - уже не совсем Java?
    #39148485
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вполне такой себе приличный язычок программирования, с которым можно жить...

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

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

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

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

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

MasterZivClosable

Since 1.5 :)
AutoClosable - Since 1.7

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

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

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

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

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

Код: 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
Java 8 - уже не совсем Java?
    #39149097
Фотография dmitriyche
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Java 8 - уже не совсем Java?
    #39149107
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Воинствующий во мне бюрократ не удержался и накатил патчик.
Код: 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
Java 8 - уже не совсем Java?
    #39149108
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А пока писал кто-то уже опередил.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39149143
ART-CODE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автоматическое распараллеливание
Можно спросить - что под этим подразумевается ?
Выполнение в несколько потоков?
Выполнение на нескольких компьютерах ?
В этом коде распараллеливание где-то происходит?
В какой строке?

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

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

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

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

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

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

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

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

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

Код: 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
Java 8 - уже не совсем Java?
    #39149530
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коллективный разум зудит во мне...

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

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

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

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



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


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