Java - все не так уж плохо

Радик Фаттахов, БАРС Груп

@radikft

В мире Java все не так уж плохо

А с выходом Java 8 все стало совсем хорошо

Чтение из файла

На самом деле


class ReadFile8 {
    public static void main(String[] args) throws IOException {
        try (Stream st = Files.lines(Paths.get("file_utf8.txt"))) {
            st.forEach(System.out::println);
        }
    }
}

Веб-сервис

На самом деле

Скачать 2 jar-файла
    public class HelloWorld extends AbstractHandler {
        @Override
        public void handle(String target, Request baseRequest, 
        HttpServletRequest request, HttpServletResponse response) throws 
        IOException, ServletException {
            response.setContentType("text/html;charset=utf-8");
            response.setStatus(HttpServletResponse.SC_OK);
            baseRequest.setHandled(true);
            response.getWriter().println("

Hello World

"); } public static void main(String[] args) throws Exception { Server server = new Server(8000); server.setHandler(new HelloWorld()); server.start(); server.join(); } }

NOT BAD

- What is pip?
- It's a python package manager.
You can install it with easy_install.
- What is easy_install?
- It's a python package manager...

Почему Java?

  • Cross Platform
  • Backward compatibility
  • Easy to learn
  • And ... Java 8!

Java 8 - ну наконец-то!

Lambda Expressions


    () -> System.out.println(this)
    (String str) -> System.out.println(str)
    str -> System.out.println(str)
    (String s1, String s2) -> { return s2.length() - s1.length(); }
    (s1, s2) -> s2.length() - s1.length()
                    

Java 8 - Lambda Expressions


Arrays.sort(strArray, (String s1, String s2) -> s2.length() - s1.length());
                    

Java 8 - Method references


    public class FileFilters {
       public static boolean fileIsPdf(File file) {/*code*/}
       public static boolean fileIsTxt(File file) {/*code*/}
       public static boolean fileIsRtf(File file) {/*code*/}
    }
                    

    Stream <File> pdfs = getFiles().filter(FileFilters::fileIsPdf);
                    

Java 8 - Functional Interfaces

  • Function<T,R>
  • Supplier<T>
  • Predicate<T>

    Function<String, String> atr = (name) -> {return "@" + name;};
                    

Java 8 - Optional

Tony Hoare: "Null References: The Billion Dollar Mistake"

Java 8 - Default Methods


    interface Foo {
        default void talk() {
            out.println("Foo!");
        }
    }
                    

Java 8 - Streams

  • stream()
  • parallelStream()

Java 8 - Streams


    Stream.generate(() -> Math.random());
                    

    Stream.iterate(1, i -> i+1).forEach(System.out::print);
                    

    IntStream.range(1, 11).forEach(System.out::println);
                    

Java 8 - Streams - ForEach


    Files.list(Paths.get(".")).forEach(System.out::println);
                    

Java 8 - Map/Filter/Reduce


    PlayerPoints highestPlayer = 
       names.stream().map(name -> new PlayerPoints(name, getPoints(name)))
           .reduce(new PlayerPoints("", 0.0), 
               (s1, s2) -> (s1.points > s2.points) ? s1 : s2);
                    

Java 8 - Streams - а кроме того...

  • Peek
  • Limit
  • Sort
  • Collectors and Statistics
  • Grouping and Partitioning

И все это concurrent из коробки!

Спасибо за внимание!

Ссылки