`

java8之新特性介绍(java 8 new features)

阅读更多
java8之新特性介绍(java 8 new features)

一、可以在接口中写方法体
   在接口中增加新方法时,可以带方法体。

   带来的好处:
   当新接口发布时,以前实现该接口的类,无需改动。
   即:无需实现新添加的方法。

   语法:使用 default 关键字
interface A{
    void show();
    default void sayHello(){
        System.out.println("Hello, World!");
    }
}


注意:
       1、实现多个接口时,接口中有重名的方法体的实现。

          如果同时实现两个具有相同方法名且实现了该方法的接口,
          需要提供自己对该方法的实现。才可以解决冲突。

          sayHello() 重复,类 C 需要实现自己的 sayHello()
interface A{
    void showA();
    default void sayHello(){
        System.out.println("Hello, A!");
    }
}
interface B{
    void showB();
    default void sayHello(){
        System.out.println("Hello, B!");
    }
}

class C implements A,B{

    public void sayHello(){
        System.out.println("Hello, C!");
    }

    public static void main(String[] args){
        C c = new C();
        c.sayHello(); // Hello, C!
    }
}


     
      2、类方法的 优先级 高于 接口方法

         接口 A 和 类 B 中都定义了方法 sayHello() 的实现,
         类 C 优先使用 类 B 的方法。

interface A{  
    void showA();  
    default void sayHello(){  
        System.out.println("Hello, A!");  
    }  
}

class B{
    public void sayHello(){  
        System.out.println("Hello, B!");  
    }  
}  
  
class C extends B implements A{ 
  
    public static void main(String[] args){  
        C c = new C();  
        c.sayHello(); // Hello, B!  
    }  
}


       3、接口中不可以重写 java.lang.Object 里面的方法
interface A {

    // can't define a equals method in interface.
    default public boolean equals(){
       
    }
}


       4、可以在接口中定义 static 方法
interface A{  
    void showA();  
    static void sayHello(){  
        System.out.println("Hello, A!");  
    }  
}

class C {
    public static void main(String[] args){  
        A.sayHello(); // Hello, A!
    }  
}



二、Functional Programming  VS. Object Oriented Programming
  
   Functional Programming with Java 8
   https://www.youtube.com/watch?v=LcfzV38YDu4

面向函数的编程(Functional Programming)是指对于只有一个方法的接口可以使用 Lambda 表达式实现。

只有一个方法的接口很好的一个例子就是: java.lang.Comparable 接口。
它只有一个方法: compareTo(Object obj)



三、Lambda Expression ( -> 斜着看 )



Lambda Expression VS. Anonymous inner class
对于只有一个方法的接口的实现类,写实现类时,只需提供( 参数 + Lambda + 方法体 )即可。


interface A{
    void show();
}

public class LambdaDemo{
    public static void main(String[] args){
        A obj;
        
        // old
        obj = new A(){
            public void show(){
                System.out.println("Hello");
            }
        }

        // java 8
        obj = () -> {
            System.out.println("Multiple");
            System.out.println("Lines ... ");
        }

        // or
        obj = () -> System.out.println("Single line.");

    }
}


说明:




为接口引入了一个新的注解:@FunctionalInterface
表示该接口为函数式接口,只允许有一个方法。否则编译器报错。
// 只允许有一个方法。否则编译器报错。
@FunctionalInterface  
public interface Runnable {
    public abstract void run();
}



四、为 java.lang.Iterable 接口增加了 forEach() 方法

NOTE:

1、java 8 之前, java.lang.Iterable 接口只有一个方法:
                java.util.Iterator<T> iterator()

2、java.util.Collection 接口,继承了 java.lang.Iterable 接口。


import java.util.Arrays;
import java.util.List;
import java.util.function.Consumer;


class IConsumer implements Consumer<Integer>{
	@Override
	public void accept(Integer t) {
		System.out.println(t);
	}
}


public class Java8ForEach {
 
    public static void main(String[] args) {
        List<Integer> list =Arrays.asList(1,2,3,5,6);
         
        // normal loop
        for(Integer i : list){
            System.out.println(i);
        }
         
        // Java 8 forEach - normal
        Consumer<Integer> action = new IConsumer();
        list.forEach(action);
         
        // Java 8 forEach - use lambda expressions.
        // see how we do it in one liner
        list.forEach(each -> System.out.println(each));
         
    }
     

}




五、Streaming API

Java collections got a new package java.util.Stream.
classes in this package provide a stream API.
And supports functional-style operations on streams of elements.

Stream API enables bulk operations like sequential or parallel map-readuce on Collections.


//Java 7 or earlier:
public List listFilter(List<Integer> bigList){
    List<Integer> filteredList = new ArrayList<>();
    for (Integer p : bigList)  {
        if (p  > 40) {
            filteredList.add(p);
        } 
    }
    return filteredList;
}

//Java 8:
public List listFilter(List<integer> bigList){
    return bigList
            .stream()
            .filter(p -> p > 40)
            .collect(Collectors.toList());
}



-

So, if you know, in this world, it's an information age, we have a concept of "Big Data", "Haddoop", we have to process huge amount of data.

1) In stream we have two types of methods:

1. Intermediate method. Like: filter(), map()
   lazy, it can't give result immediately until you call a terminate method.

2. Terminate method. Like: findFirst(), forEach()

Example Given:
List<Integer> values = Arrays.asList(4,5,6,7,8);
values.stream().filter(i->{
    Sysout.out.println("Hello");
    return true;
});



2) Stream is once used, it can't be reused:

Stream<Integer> s = values.stream();
s.forEach(Sysout.out::println);  // works
s.forEach(Sysout.out::println);  // throws Exception



--

中间操作
该操作会保持 stream 处于中间状态,允许做进一步的操作。它返回的还是的 Stream,允许更多的链式操作。常见的中间操作有:

    - filter():对元素进行过滤;
    - sorted():对元素排序;
    - map():元素的映射;
    - distinct():去除重复元素;
    - subStream():获取子 Stream 等。

例如,下面是对一个字符串集合进行过滤,返回以“s”开头的字符串集合,并将该集合依次打印出来:
list.stream()
.filter((s) -> s.startsWith("s"))
.forEach(System.out::println);

这里的 filter(...) 就是一个中间操作,该中间操作可以链式地应用其他 Stream 操作。

终止操作
该操作必须是流的最后一个操作,一旦被调用,Stream 就到了一个终止状态,而且不能再使用了。常见的终止操作有:

    - forEach():对每个元素做处理;
    - toArray():把元素导出到数组;
    - findFirst():返回第一个匹配的元素;
    - anyMatch():是否有匹配的元素等。

例如,下面是对一个字符串集合进行过滤,返回以“s”开头的字符串集合,并将该集合依次打印出来:
list.stream()
.filter((s) -> s.startsWith("s"))
.forEach(System.out::println);

这里的 forEach(...) 就是一个终止操作,该操作之后不能再链式的添加其他操作了。






-
转载请注明
原文出处:http://lixh1986.iteye.com/blog/2329376




引用:

http://www.oracle.com/technetwork/java/javase/8-whats-new-2157071.html

Java 8 new features with Example
https://www.youtube.com/playlist?list=PLsyeobzWxl7qbvNnJKjYbkTLn2w3eRy1Q


Java 8 Stream API Features Lambda Expression
https://www.youtube.com/playlist?list=PLsyeobzWxl7otduRddQWYTQezVul0xIX6


http://programtalk.com/java/java-8-new-features/



更多:

Java 9 新特性
http://programtalk.com/java/java-9-new-features/






-
  • 大小: 4.3 KB
  • 大小: 15.1 KB
分享到:
评论

相关推荐

    JDK1.8新特性-New Features in Java SE 8

    JDK 1.8,也被称为Java SE 8,是Java平台的一个重要版本更新,其引入了多项新的特性和改进,极大地提升了...这些新特性也反映了函数式编程风格在Java平台中的重要性日益增强,为Java的未来发展方向提供了重要的指引。

    java8-new-features

    Java 8 最重要的新特性之一就是引入了Lambda表达式。Lambda表达式的引入极大地简化了代码编写,并为Java语言带来了函数式编程的特性。 **函数式接口**: - **定义**:函数式接口是指仅有一个抽象方法的接口,这样的...

    Java 11 and 12 – New Features

    Enhance your development skills with Java's state-of-the-art features and projects to make your applications leaner and faster... Make the best use of new Java features and libraries in your applications

    Java-8-Features.zip_Java 8

    Java 8是Java编程语言的一个重大更新,引入了一系列新特性,极大地提升了开发效率和代码的可读性。在这个名为"Java 8 Features"的压缩包中,包含了一份PDF文档,详细讲解了Java 8的核心特性。以下是这些特性的详细...

    55 新特性之Java SE 8

    吸引了将近两万人参会的甲骨文大会,着实让广大Java开发和数据库管理员云集一堂,甲骨文推出了掌控sun以来真正意义上的一次大的版本发布,Java SE 8将是一个里程碑式的版本,55个新特性,让人感觉好多Java的东西让人...

    java_ee_sdk-8u1.zip

    Java EE 8 continues to improve API and programming models needed for today's applications and adds features requested by our world-wide community. This release modernizes support for many industry ...

    Prentice.Hall.Core.Java.Volume.2.Advanced.Features.8th.Edition.

    《Prentice Hall Core Java Volume 2 Advanced Features 8th Edition》是一本广泛认可的Java编程书籍,由Cay S. Horstmann和Gary Cornell撰写。这本书是Java开发者的重要参考资料,特别是对于那些希望深入理解Java...

    Android代码-java8-tutorial

    &gt; You should also read my Java 11 Tutorial (including new language and API features from Java 9, 10 and 11). Welcome to my introduction to Java 8. This tutorial guides you step by step through all new...

    Corejava8h

    8. **Java 8的新特性**:如Lambda表达式、函数式接口、Stream API和日期时间API,这些都是Java 8的重要更新。 9. **JVM内存模型**:解释了Java虚拟机的工作原理,包括类加载、垃圾回收以及内存管理。 通过学习...

    Core Java Volume II Advanced Features__10th edition

    Now, Core Java®, Volume II—Advanced Features, Tenth Edition, has been extensively updated to reflect the most eagerly awaited and innovative version of Java in years: Java SE 8. Rewritten and ...

    java8stream源码-java-8-new-features:学习Java8新特性的练习。GL目标演示的一部分

    新特性示例 大多数示例都基于《现代 Java 实战》一书 [1]。 Java Magazine [2] 中提供了更详细的选项示例。 The Java Tutorials [3] 中描述了使用 lambda 的类似“行为参数化”方法。 项目结构 领域模型图(plantuml...

    Java+EE+8+Application+Development-Packt+Publishing(2017).epub

    Java Enterprise Edition 8, the latest version of the Java EE specification, adds several new features to the specification. Several existing Java EE APIs have seen major improvements in this version ...

    java8-features:Java8新语法练习

    在这个名为"java8-features:Java8新语法练习"的项目中,我们可以深入学习和实践这些特性。以下是Java 8的一些核心亮点: 1. **函数式编程**: - **Lambda表达式**:这是Java 8最显著的变化之一,它允许我们以简洁...

Global site tag (gtag.js) - Google Analytics