ホームページ Java &#&はじめる JDK8の新機能の詳細な紹介

JDK8の新機能の詳細な紹介

Nov 26, 2019 pm 01:45 PM
jdk8 新機能

JDK8の新機能の詳細な紹介

関数型プログラミング

オブジェクト指向は、「すべてがオブジェクトである」ということを強調します。何かをしたい場合は、オブジェクトを見つける必要があります。でやります。関数型プログラミングの考え方では、「方法」ではなく「何を行うか」に重点が置かれます。

通常のオープニング スレッド

// 匿名内部类对象
Runnable task = new Runnable() {
    @Override
    public void run() {
        System.out.println("乌鸦坐飞机");
    }
};
new Thread(task).start();
ログイン後にコピー

その他の Java 関連の無料ビデオ チュートリアル: Java オンライン チュートリアル

関数を開く

new Thread(() -> System.out.println("龙卷风摧毁停车场")).start();
ログイン後にコピー

のようなプログラミングを使用したスレッド その前の括弧: メソッドのパラメータ。パラメータがない場合は、()と書きます。矢印は後で何を行うかを指します。矢印の後ろは次のようになりますメソッド本体の中括弧。特定の実行内容を表します。

ラムダ式

クロージャとも呼ばれるラムダ式は、Java 8 のリリースを推進する最も重要な新機能です。

Lambda では、関数をメソッドのパラメーターとして使用できます (関数はパラメーターとしてメソッドに渡されます)。ラムダ式を使用すると、コードをより簡潔でコンパクトにすることができます。

3 つの要素: パラメーター、矢印、コード

形式: (パラメーター タイプ パラメーター名) -> {コード}

ラムダ式を使用する式の前提: インターフェイスが存在する必要があり、インターフェイスには抽象メソッドが 1 つだけあります。

デモ: Cook インターフェイスを作成します。インターフェイスには makeFood() メソッドがあります。

public static void main(String[] args) {
    method(() -> {
        System.out.println("闪刀启动!");
    });
}
 
private static void method(Cook cook) {
    cook.makeFood();
}
ログイン後にコピー

ラムダ式 数式省略規則:

パラメータの型は省略可能です。ただし、すべてのパラメータの型を同時に省略するか、まったく省略できないことのみ可能です。パラメータが 1 つだけある場合、括弧は省略できます。中括弧内のステートメントが 1 つだけの場合、戻り値の有無に関係なく、return、括弧、セミコロンは省略できます。

    public static void main(String[] args) {
        method((a, b)-> a + b);
    }
 
    private static void method(Calculator calculator) {
        int result = calculator.sum(1234, 9876);
        System.out.println(result);
    }
ログイン後にコピー

新しいインターフェイスの場合、匿名内部クラスの代わりにラムダ式を使用することもできます

Runnable task = () -> System.out.println("闪刀启动!");
new Thread(task).start();
ログイン後にコピー

関数型インターフェイス

インターフェイスには と があります関数インターフェイスと呼ばれる抽象メソッドは 1 つだけです。

アノテーション @FunctionalInterface が JDK8 に追加されました。これは、インターフェイスが機能インターフェイスであるかどうかを検出するために使用されます。機能的なインターフェイスではない場合、コンパイル中にエラーが報告されます。 @FunctionalInerface アノテーションはオプションであり、このアノテーションを使用しない場合でも、関数型インターフェースの定義要件を満たしている限り、それは関数型インターフェースです。

@FunctionalInterface
public interface MyInterface {
    void method();
}
ログイン後にコピー

メソッドリファレンス

Printer printer = (str) -> System.out.println(str);このコードは実際には次のようになります。略称。

推論可能な限り参照可能であるため、パラメータを渡すことは実際には無意味であるため、ここでは実際にメソッド参照を使用して System.out::println

# を省略できます。 ## java8 から新しい演算子が導入され、メソッド参照演算子 (2 つのコロンが連続して記述されます)、式はメソッド参照です、メソッド参照と Lambda の本質はまったく同じです、目的は Lambda 式スタイルを簡素化することです書くことの。

Lambdaの書き方:

s->System.out.println(s)

メソッドリファレンスの書き方:

System.out::println

2 つの書き込みメソッドは完全に同等です

 
    public static void main(String[] args) {
        method(System.out::println);
    }
 
    private static void method(Printer printer) {
        printer.print("hello");
    }
ログイン後にコピー

インターフェイス

デフォルト メソッド

元々は 2 つの抽象メソッドだったインターフェイスを 3 つの抽象メソッドに変更する必要があり、その実装クラスも新しいメソッドを実装する必要があります。

実装クラスが多すぎると操作が非常に面倒になる JDK では、拡張にはオープン、修正にはクローズというオープンクローズ設計モードを使用していました。つまり、新しいインターフェイスを作成し、元のインターフェイスを継承し、新しいメソッドを定義します。ただし、この場合、元の実装クラスには新しいメソッドがありません。この時点では、インターフェイスのデフォルトのメソッドが使用できます。

キーワードはデフォルトで変更され、メソッドにはメソッド本体が必要です。このようなメソッドのすべてのサブクラスはデフォルトで実装されます (自分で記述する必要はありません)。これをオーバーライドしたい場合は、実装クラス

/**
 * 从java8开始,接口当中允许定义default默认方法
 * 修饰符:public default(public可以省略,default不能省略)
 */
public interface MyInterface {
 
    void method1();
 
    void method2();
 
    default void methodNew() {
        System.out.println("接口默认方法执行");
    }
 
}
ログイン後にコピー

Note でオーバーライドすることもできます。 : インターフェイスのデフォルト メソッドは同等です。 したがって、新しいキーワードと 4 つの修飾子の「デフォルト」は同じ概念ではありません。

default キーワードを使用すると、プログラムで「多重継承」の効果を実現できます。

静的メソッド

java8 からはインターフェース内で静的メソッドを定義できるようになり、使い方は一般クラスの静的メソッドと同じになります。

public interface Animal {
 
    void eat();
 
    static Animal getAnimal() {
        return new Cat();
    }
}
ログイン後にコピー

ストリーミング操作

ストリーミング処理が開発者に与える第一印象は、コレクション操作がはるかに簡単になるということです。通常、これを完了するには複数行のコードが必要です。ストリーミング処理を利用することで、操作を 1 行で実装できます。

たとえば、整数を含むコレクションからすべての偶数をフィルターで除外し、それらを新しい List にカプセル化して返したい場合、Java8 より前では、次のコードを実装する必要があります。

数値のコレクションの場合:

List<Integer> evens = new ArrayList<>();
for (final Integer num : nums) {
    if (num % 2 == 0) {
        evens.add(num);
    }
}
ログイン後にコピー

Java8 のストリーミング処理により、コードを次のように簡略化できます:

List<Integer> evens = nums.stream().filter(num -> num % 2 == 0).collect(Collectors.toList());
ログイン後にコピー

上記のステートメント行、stream() 操作の意味を簡単に説明します。コレクションをストリームに変換し、filter() でカスタム フィルタリング プロセスを実行します。ここでは、ラムダ式ですべての偶数をフィルタリングし、最後に、collect() で結果をカプセル化し、Collectors.toList() で指定します。 List コレクションにカプセル化されます。そして戻ってきました。

常用操作案例:

        //初始化list集合
        List<String> list = new ArrayList<String>();
        list.add("测试数据1");
        list.add("测试数据2");
        list.add("测试数据3");
        list.add("测试数据12");
        
        //使用λ表达式遍历集合
        list.forEach(s -> System.out.println(s));
        
        //结合Predicate使用和过滤条件筛选元素
        Predicate<String> contain1 = n -> n.contains("1");
        Predicate<String> contain2 = n -> n.contains("2");
        
        //根据条件遍历集合
        list.stream().filter(contain1).forEach(n -> System.out.println(n));
        list.stream().filter(s -> contain1.test(s)).forEach(s -> System.out.println(s));
        list.stream().filter(contain1.and(contain2)).forEach(n -> System.out.println(n));
        list.stream().filter(contain1.or(contain2)).forEach(n -> System.out.println(n));
        
        //将过滤后的元素重新放到一个集合中
        List<String> newList = list.stream().filter(contain1.and(contain2)).collect(Collectors.toList());
        
集合中decimal求和
		BigDecimal sum = list
				.stream()
				.map(Person::getAmount)
				.reduce(BigDecimal::add)
				.get();
 
//排序 , 也需要新的集合接收
	List<Student> resultList = new ArrayList<Student>();
	resultList = list.stream().sorted(Comparator.comparing(Student::getAge)).collect(Collectors.toList())
ログイン後にコピー

推荐java相关文章:java零基础入门

欢迎大家一起来学习!

以上がJDK8の新機能の詳細な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHP 8.3 リリース: 新機能の概要 PHP 8.3 リリース: 新機能の概要 Nov 27, 2023 pm 12:52 PM

PHP8.3 リリース: 新機能の概要 テクノロジーが発展し、ニーズが変化するにつれて、プログラミング言語は常に更新され、改善されています。 Web 開発で広く使用されているスクリプト言語として、PHP は開発者により強力で効率的なツールを提供するために絶えず改良されてきました。最近リリースされた PHP 8.3 バージョンには、待望の新機能と改善点が多数含まれています。これらの新機能の概要を見てみましょう。 null 以外のプロパティの初期化 PHP の過去のバージョンでは、クラス プロパティに明示的に値が割り当てられていない場合、その値は

PHP8 の新機能を学び、最新テクノロジーを深く理解するためのガイド PHP8 の新機能を学び、最新テクノロジーを深く理解するためのガイド Dec 23, 2023 pm 01:16 PM

最新テクノロジーを習得するために役立つ、PHP8 の新機能の詳細な分析 PHP プログラミング言語は、時間の経過とともに常に進化し、改善されています。最近リリースされた PHP8 バージョンは、開発者に多くのエキサイティングな新機能と改善を提供し、開発作業にさらなる利便性と効率をもたらします。この記事では、PHP8 の新機能を詳しく分析し、これらの最新テクノロジーをよりよく習得するのに役立つ具体的なコード例を提供します。 JIT コンパイラー PHP8 では JIT (Just-In-Time) コンパイルが導入されています

php8の新機能は何ですか php8の新機能は何ですか Sep 25, 2023 pm 01:34 PM

php8 の新機能には、JIT コンパイラ、型推論、名前付きパラメータ、共用体型、プロパティ、エラー処理の改善、非同期プログラミングのサポート、新しい標準ライブラリ関数、匿名クラス拡張機能が含まれます。詳細な紹介: 1. JIT コンパイラー、PHP8 は、重要なパフォーマンスの向上である JIT コンパイラーを導入します。JIT コンパイラーは、一部の高頻度の実行コードをリアルタイムでコンパイルおよび最適化できるため、実行速度が向上します。2. 型導出、PHP8型推論機能を導入し、開発者が変数宣言時などに変数の型を自動的に推測できるようにします。

Go 言語の新機能の解釈: プログラミングをより効率的にする Go 言語の新機能の解釈: プログラミングをより効率的にする Mar 10, 2024 pm 12:27 PM

【Go言語の新機能解説:プログラミングを効率化するには具体的なコード例が必要】 近年、ソフトウェア開発の分野でGo言語が注目を集めており、そのシンプルで効率的な設計思想がますます注目を集めています。開発者。 Go 言語は静的型付けプログラミング言語として、開発効率を向上させ、コード作成プロセスを簡素化するための新機能を導入し続けています。この記事では、Go 言語の最新機能を詳しく説明し、これらの新機能によってもたらされる利便性を具体的なコード例を通じて体験する方法について説明します。モジュール開発(GoModules) 1からのGo言語

CSS3 の新機能の概要: CSS3 を使用してトランジション効果を実現する方法 CSS3 の新機能の概要: CSS3 を使用してトランジション効果を実現する方法 Sep 09, 2023 am 11:27 AM

CSS3 の新機能の概要: CSS3 を使用してトランジション効果を実現する方法 CSS3 は CSS の最新バージョンですが、数多くの新機能の中で最も興味深く実用的なのはトランジション効果でしょう。トランジション効果は、インタラクション中にページをよりスムーズで美しくし、ユーザーに優れた視覚体験を提供します。この記事では、CSS3 トランジション効果の基本的な使用法を、対応するコード例とともに紹介します。 transition-property 属性: 遷移する必要がある CSS プロパティの遷移効果を指定します。

PHP8.1 で導入された新しい Redis 拡張機能 PHP8.1 で導入された新しい Redis 拡張機能 Jul 07, 2023 pm 09:41 PM

PHP8.1 で導入された新しい Redis 拡張機能 インターネットの急速な発展に伴い、大量のデータを保存および処理する必要があります。データ処理の効率とパフォーマンスを向上させるために、キャッシュは不可欠な部分になっています。 PHP 開発では、Redis は高性能のキー/値ストレージ システムとして、キャッシュやデータ ストレージのシナリオで広く使用されています。 PHP で Redis を使用するエクスペリエンスをさらに向上させるために、PHP8.1 では新しい Redis 拡張機能が導入されています。この記事では、この拡張機能の新機能と提供内容を紹介します。

CSS3 の新機能の概要: CSS3 を使用して水平方向の中央揃えのレイアウトを実現する方法 CSS3 の新機能の概要: CSS3 を使用して水平方向の中央揃えのレイアウトを実現する方法 Sep 09, 2023 pm 04:09 PM

CSS3 の新機能の概要: CSS3 を使用して水平方向中央レイアウトを実現する方法 Web デザインとレイアウトでは、水平方向中央レイアウトが一般的な要件です。これまでは、これを実現するために複雑な JavaScript や CSS のトリックを使用することがよくありました。ただし、CSS3 では、水平方向中央揃えのレイアウトをよりシンプルかつ柔軟にするいくつかの新機能が導入されました。この記事では、CSS3 のいくつかの新機能を紹介し、CSS3 を使用して水平方向の中央揃えのレイアウトを実現する方法を示すコード例をいくつか示します。 1. フレックスボックスを使用してファイルをレイアウトする

CSS3 の新機能の概要: CSS3 アニメーション効果を適用する方法 CSS3 の新機能の概要: CSS3 アニメーション効果を適用する方法 Sep 09, 2023 am 09:15 AM

CSS3 の新機能の概要: CSS3 アニメーション効果を適用する方法 はじめに: インターネットの発展に伴い、CSS3 はフロントエンド開発で最も一般的に使用されるスタイル言語として CSS2 に徐々に取って代わりました。 CSS3 は多くの新機能を提供しますが、その中で最も人気のある機能はアニメーション効果です。 CSS3 アニメーションを使用すると、Web ページに素晴らしいインタラクティブな効果を追加し、ユーザー エクスペリエンスを向上させることができます。この記事では、CSS3 の一般的に使用されるアニメーション機能をいくつか紹介し、関連するコード例を示します。 1. トランジションアニメーション

See all articles