JAVA 8 adalah rilis fitur utama dari pengembangan bahasa pemrograman JAVA. Versi awalnya dirilis pada 18 Maret 2014. Dengan rilis Java 8, Java menyediakan dukungan untuk pemrograman fungsional, mesin JavaScript baru, API baru untuk manipulasi waktu tanggal, API streaming baru, dll.
Fitur Baru
Ekspresi Lambda Menambahkan kemampuan pemrosesan fungsional ke Java.
Referensi metode Merujuk fungsi dengan namanya alih-alih memanggilnya secara langsung. Menggunakan fungsi sebagai parameter.
Metode default Antarmuka untuk menerapkan metode default.
Alat baru Alat dan utilitas kompiler baru ditambahkan seperti 'jdeps' untuk mengetahui dependensi.
API Aliran API aliran baru untuk memfasilitasi pemrosesan pipa.
API Tanggal Waktu API waktu tanggal yang ditingkatkan.
Opsional Penekanan pada praktik terbaik untuk menangani nilai nol dengan benar.
Nashorn, Mesin JavaScript Mesin berbasis Java untuk mengeksekusi kode JavaScript.
Perhatikan cuplikan kode berikut.
Demo Langsung
import java.util.Collections;
import java.util.List;
import java.util.ArrayList;
import java.util.Comparator;
public class Java8Tester {
public static void main(String args[]) {
List<String> names1 = new ArrayList<String>();
names1.add("Mahesh ");
names1.add("Suresh ");
names1.add("Ramesh ");
names1.add("Naresh ");
names1.add("Kalpesh ");
List<String> names2 = new ArrayList<String>();
names2.add("Mahesh ");
names2.add("Suresh ");
names2.add("Ramesh ");
names2.add("Naresh ");
names2.add("Kalpesh ");
Java8Tester tester = new Java8Tester();
System.out.println("Sort using Java 7 syntax: ");
tester.sortUsingJava7(names1);
System.out.println(names1);
System.out.println("Sort using Java 8 syntax: ");
tester.sortUsingJava8(names2);
System.out.println(names2);
}
//sort using java 7
private void sortUsingJava7(List<String> names) {
Collections.sort(names, new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
return s1.compareTo(s2);
}
});
}
//sort using java 8
private void sortUsingJava8(List<String> names) {
Collections.sort(names, (s1, s2) -> s1.compareTo(s2));
}
}
Di sini sortUsingJava8() metode ini menggunakan fungsi sortir dengan ekspresi lambda sebagai parameter untuk mendapatkan kriteria pengurutan.
Java 8 - Pengaturan Lingkungan
Pengaturan Lingkungan Lokal
Jika Anda ingin mengatur lingkungan Anda sendiri untuk bahasa pemrograman Java, maka bagian ini memandu Anda melalui seluruh proses. Silakan ikuti langkah-langkah yang diberikan di bawah ini untuk menyiapkan lingkungan Java Anda.
Java SE dapat diunduh secara gratis dari tautan berikut
Anda mengunduh versi berdasarkan sistem operasi Anda.
Ikuti petunjuk untuk mengunduh Java, dan jalankan .exe untuk menginstal Java di mesin Anda. Setelah Anda menginstal Java pada mesin Anda, Anda perlu mengatur variabel lingkungan untuk menunjuk ke direktori instalasi yang benar.
Mengatur Jalur untuk Windows 2000/XP
Dengan asumsi Anda telah menginstal Java di direktori c:\Program Files\java\jdk
Klik kanan pada 'My Computer' dan pilih 'Properties'.
Klik tombol 'Variabel lingkungan' di bawah tab 'Lanjutan'.
Sekarang, ubah variabel 'Path' sehingga juga berisi path ke Java yang dapat dieksekusi. Misalnya, jika jalur saat ini disetel ke 'C:\WINDOWS\SYSTEM32', maka ubah jalur Anda menjadi 'C:\WINDOWS\SYSTEM32;c:\Program Files\java\jdk\bin'.
Menyiapkan Jalur untuk Windows 95/98/ME
Dengan asumsi Anda telah menginstal Java di direktori c:\Program Files\java\jdk
Edit file 'C:\autoexec.bat' dan tambahkan baris berikut di akhir
SET PATH=%PATH%;C:\Program Files\java\jdk\bin
Menyiapkan Path untuk Linux, UNIX, Solaris, FreeBSD
PATH variabel lingkungan harus diatur ke titik di mana binari Java telah diinstal. Lihat dokumentasi shell Anda jika Anda kesulitan melakukannya.
Misalnya, jika Anda menggunakan bash sebagai shell Anda, maka Anda akan menambahkan baris berikut di akhir '.bashrc:export PATH=/path/to/java:$PATH'
Editor Java Populer
Untuk menulis program Java, Anda memerlukan editor teks. Bahkan ada IDE yang lebih canggih yang tersedia di pasar. Namun untuk saat ini, Anda dapat mempertimbangkan salah satu dari berikut ini −
Buku Catatan Pada mesin Windows, Anda dapat menggunakan editor teks sederhana seperti Notepad (disarankan untuk tutorial ini) atau TextPad.
Netbeans Ini adalah IDE Java yang open-source dan gratis. Itu dapat diunduh dari https://netbeans.org/index.html.
Gerhana Ini juga merupakan Java IDE yang dikembangkan oleh komunitas open-source Eclipse dan dapat diunduh dari https://www.Eclipse.org/.
Java 8 - Ekspresi Lambda
Ekspresi Lambda diperkenalkan di Java 8 dan disebut-sebut sebagai fitur terbesar Java 8. Ekspresi Lambda memfasilitasi pemrograman fungsional, dan sangat menyederhanakan pengembangan.
Sintaks
Ekspresi lambda ditandai dengan sintaks berikut.
parameter -> expression body
Berikut ini adalah karakteristik penting dari ekspresi lambda.
Deklarasi jenis opsional Tidak perlu mendeklarasikan tipe parameter. Kompiler dapat menyimpulkan hal yang sama dari nilai parameter.
Kurung opsional di sekitar parameter Tidak perlu mendeklarasikan satu parameter dalam kurung. Untuk beberapa parameter, tanda kurung diperlukan.
Kurung kurawal opsional Tidak perlu menggunakan kurung kurawal pada ekspresi body jika body berisi satu pernyataan.
Kata kunci pengembalian opsional Kompilator secara otomatis mengembalikan nilai jika tubuh memiliki ekspresi tunggal untuk mengembalikan nilai. Kurung kurawal diperlukan untuk menunjukkan bahwa ekspresi mengembalikan nilai.
Contoh Ekspresi Lambda
Buat program Java berikut menggunakan editor pilihan Anda, misalnya, C:\> JAVA.
Java8Tester.java
Demo Langsung
public class Java8Tester {
public static void main(String args[]) {
Java8Tester tester = new Java8Tester();
//with type declaration
MathOperation addition = (int a, int b) -> a + b;
//with out type declaration
MathOperation subtraction = (a, b) -> a - b;
//with return statement along with curly braces
MathOperation multiplication = (int a, int b) -> { return a * b; };
//without return statement and without curly braces
MathOperation division = (int a, int b) -> a / b;
System.out.println("10 + 5 = " + tester.operate(10, 5, addition));
System.out.println("10 - 5 = " + tester.operate(10, 5, subtraction));
System.out.println("10 x 5 = " + tester.operate(10, 5, multiplication));
System.out.println("10 / 5 = " + tester.operate(10, 5, division));
//without parenthesis
GreetingService greetService1 = message ->
System.out.println("Hello " + message);
//with parenthesis
GreetingService greetService2 = (message) ->
System.out.println("Hello " + message);
greetService1.sayMessage("Mahesh");
greetService2.sayMessage("Suresh");
}
interface MathOperation {
int operation(int a, int b);
}
interface GreetingService {
void sayMessage(String message);
}
private int operate(int a, int b, MathOperation mathOperation) {
return mathOperation.operation(a, b);
}
}
Verifikasi Hasil
Kompilasi kelas menggunakan javac kompiler sebagai berikut
Berikut ini adalah poin penting yang harus diperhatikan dalam contoh di atas.
Ekspresi Lambda digunakan terutama untuk mendefinisikan implementasi inline dari antarmuka fungsional, yaitu antarmuka dengan metode tunggal saja. Dalam contoh di atas, kami telah menggunakan berbagai jenis ekspresi lambda untuk mendefinisikan metode operasi antarmuka MathOperation. Kemudian kita telah mendefinisikan implementasi sayMessage of GreetingService.
Ekspresi Lambda menghilangkan kebutuhan kelas anonim dan memberikan kemampuan pemrograman fungsional yang sangat sederhana namun kuat ke Java.
Cakupan
Dengan menggunakan ekspresi lambda, Anda dapat merujuk ke variabel final apa pun atau variabel final efektif (yang ditetapkan hanya sekali). Ekspresi Lambda memunculkan kesalahan kompilasi, jika variabel diberi nilai untuk kedua kalinya.
Contoh Cakupan
Buat program Java berikut menggunakan editor pilihan Anda, misalnya, C:\> JAVA.
Java8Tester.java
Demo Langsung
public class Java8Tester {
final static String salutation = "Hello! ";
public static void main(String args[]) {
GreetingService greetService1 = message ->
System.out.println(salutation + message);
greetService1.sayMessage("Mahesh");
}
interface GreetingService {
void sayMessage(String message);
}
}
Verifikasi Hasil
Kompilasi kelas menggunakan javac kompiler sebagai berikut
C:\JAVA>javac Java8Tester.java
Sekarang jalankan Java8Tester sebagai berikut
C:\JAVA>java Java8Tester
Ini harus menghasilkan output berikut
Hello! Mahesh
Java 8 - Referensi Metode
Referensi metode membantu menunjukkan metode dengan namanya. Referensi metode dijelaskan menggunakan simbol "::". Referensi metode dapat digunakan untuk menunjukkan jenis metode berikut −
Metode statis
Metode contoh
Konstruktor menggunakan operator baru (TreeSet::new)
Contoh Referensi Metode
Buat program Java berikut menggunakan editor pilihan Anda, misalnya, C:\> JAVA.
Java8Tester.java
import java.util.List;
import java.util.ArrayList;
public class Java8Tester {
public static void main(String args[]) {
List names = new ArrayList();
names.add("Mahesh");
names.add("Suresh");
names.add("Ramesh");
names.add("Naresh");
names.add("Kalpesh");
names.forEach(System.out::println);
}
}
Di sini kita telah melewati metode System.out::println sebagai referensi metode statis.
Verifikasi Hasil
Kompilasi kelas menggunakan javac kompiler sebagai berikut
C:\JAVA>javac Java8Tester.java
Sekarang jalankan Java8Tester sebagai berikut
C:\JAVA>java Java8Tester
Ini harus menghasilkan output berikut
Mahesh
Suresh
Ramesh
Naresh
Kalpesh
Java 8 - Antarmuka Fungsional
Antarmuka fungsional memiliki fungsi tunggal untuk dipamerkan. Misalnya, antarmuka Sebanding dengan metode tunggal 'compareTo' digunakan untuk tujuan perbandingan. Java 8 telah mendefinisikan banyak antarmuka fungsional untuk digunakan secara ekstensif dalam ekspresi lambda. Berikut adalah daftar antarmuka fungsional yang didefinisikan dalam paket java.util.Function.
No.Sr.
Antarmuka &Deskripsi
1
Konsumen Bi
Mewakili operasi yang menerima dua argumen input, dan tidak mengembalikan hasil.
2
BiFunction
Mewakili fungsi yang menerima dua argumen dan menghasilkan hasil.
3
Operator Biner
Mewakili operasi pada dua operan dengan tipe yang sama, menghasilkan hasil dari tipe yang sama dengan operan.
4
Predikat Bi
Mewakili predikat (fungsi bernilai Boolean) dari dua argumen.
5
Pemasok Boolean
Mewakili pemasok hasil bernilai Boolean.
6
Konsumen
Mewakili operasi yang menerima argumen input tunggal dan tidak mengembalikan hasil.
7
DoubleBinaryOperator
Mewakili operasi pada dua operan bernilai ganda dan menghasilkan hasil bernilai ganda.
8
Konsumen Ganda
Mewakili operasi yang menerima argumen tunggal bernilai ganda dan tidak mengembalikan hasil.
9
Fungsi Ganda
Mewakili fungsi yang menerima argumen bernilai ganda dan menghasilkan hasil.
10
Predikat Ganda
Mewakili predikat (fungsi bernilai Boolean) dari satu argumen bernilai ganda.
11
Pemasok Ganda
Mewakili pemasok hasil bernilai ganda.
12
DoubleToIntFunction
Mewakili fungsi yang menerima argumen bernilai ganda dan menghasilkan hasil bernilai int.
13
DoubleToLongFunction
Mewakili fungsi yang menerima argumen bernilai ganda dan menghasilkan hasil bernilai panjang.
14
DoubleUnaryOperator
Mewakili operasi pada operan bernilai ganda tunggal yang menghasilkan hasil bernilai ganda.
15
Fungsi
Mewakili fungsi yang menerima satu argumen dan menghasilkan hasil.
16
IntBinaryOperator
Mewakili operasi pada dua operan bernilai int dan menghasilkan hasil bernilai int.
17
IntConsumer
Mewakili operasi yang menerima argumen bernilai int tunggal dan tidak mengembalikan hasil.
18
IntFunction
Mewakili fungsi yang menerima argumen bernilai int dan menghasilkan hasil.
19
IntPredicate
Mewakili predikat (fungsi bernilai Boolean) dari satu argumen bernilai int.
20
IntSupplier
Mewakili pemasok hasil yang bernilai tinggi.
21
IntToDoubleFunction
Mewakili fungsi yang menerima argumen bernilai int dan menghasilkan hasil bernilai ganda.
22
IntToLongFunction
Mewakili fungsi yang menerima argumen bernilai int dan menghasilkan hasil bernilai panjang.
23
IntUnaryOperator
Mewakili operasi pada operan bernilai int tunggal yang menghasilkan hasil bernilai int.
24
LongBinaryOperator
Mewakili operasi pada dua operan bernilai panjang dan menghasilkan hasil bernilai panjang.
25
Konsumen Panjang
Mewakili operasi yang menerima satu argumen bernilai panjang dan tidak mengembalikan hasil.
26
Fungsi Panjang
Mewakili fungsi yang menerima argumen bernilai panjang dan menghasilkan hasil.
27
Predikat Panjang
Mewakili predikat (fungsi bernilai Boolean) dari satu argumen bernilai panjang.
28
Pemasok Panjang
Mewakili pemasok hasil yang bernilai lama.
29
Fungsi LongToDouble
Mewakili fungsi yang menerima argumen bernilai panjang dan menghasilkan hasil bernilai ganda.
30
LongToIntFunction
Mewakili fungsi yang menerima argumen bernilai panjang dan menghasilkan hasil bernilai int.
31
LongUnaryOperator
Mewakili operasi pada operan bernilai panjang tunggal yang menghasilkan hasil bernilai panjang.
32
ObjDoubleConsumer
Mewakili operasi yang menerima argumen bernilai objek dan bernilai ganda, dan tidak mengembalikan hasil.
33
ObjIntConsumer
Mewakili operasi yang menerima argumen bernilai objek dan bernilai int, dan tidak mengembalikan hasil.
34
ObjLongConsumer
Mewakili operasi yang menerima argumen bernilai objek dan bernilai panjang, dan tidak mengembalikan hasil.
35
Predikat
Mewakili predikat (fungsi bernilai Boolean) dari satu argumen.
36
Pemasok
Mewakili pemasok hasil.
37
ToDoubleBiFunction
Mewakili fungsi yang menerima dua argumen dan menghasilkan hasil bernilai ganda.
38
ToDoubleFunction
Mewakili fungsi yang menghasilkan hasil bernilai ganda.
39
ToIntBiFunction
Mewakili fungsi yang menerima dua argumen dan menghasilkan hasil bernilai int.
40
ToIntFunction
Mewakili fungsi yang menghasilkan hasil bernilai int.
41
ToLongBiFunction
Mewakili fungsi yang menerima dua argumen dan menghasilkan hasil bernilai panjang.
42
ToLongFunction
Mewakili fungsi yang menghasilkan hasil bernilai panjang.
43
UnaryOperator
Mewakili operasi pada operan tunggal yang menghasilkan hasil dengan tipe yang sama dengan operan-nya.
Contoh Antarmuka Fungsional
Predikat antarmuka adalah antarmuka fungsional dengan tes metode (Objek) untuk mengembalikan nilai Boolean. Antarmuka ini menandakan bahwa suatu objek diuji benar atau salah.
Buat program Java berikut menggunakan editor pilihan Anda, misalnya, C:\> JAVA.
Java8Tester.java
Demo Langsung
import java.util.Arrays;
import java.util.List;
import java.util.function.Predicate;
public class Java8Tester {
public static void main(String args[]) {
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9);
// Predicate<Integer> predicate = n -> true
// n is passed as parameter to test method of Predicate interface
// test method will always return true no matter what value n has.
System.out.println("Print all numbers:");
//pass n as parameter
eval(list, n->true);
// Predicate<Integer> predicate1 = n -> n%2 == 0
// n is passed as parameter to test method of Predicate interface
// test method will return true if n%2 comes to be zero
System.out.println("Print even numbers:");
eval(list, n-> n%2 == 0 );
// Predicate<Integer> predicate2 = n -> n > 3
// n is passed as parameter to test method of Predicate interface
// test method will return true if n is greater than 3.
System.out.println("Print numbers greater than 3:");
eval(list, n-> n > 3 );
}
public static void eval(List<Integer> list, Predicate<Integer> predicate) {
for(Integer n: list) {
if(predicate.test(n)) {
System.out.println(n + " ");
}
}
}
}
Di sini kita telah melewati antarmuka Predikat, yang mengambil satu input dan mengembalikan Boolean.
Verifikasi Hasil
Kompilasi kelas menggunakan javac kompiler sebagai berikut
C:\JAVA>javac Java8Tester.java
Sekarang jalankan Java8Tester sebagai berikut
C:\JAVA>java Java8Tester
Ini harus menghasilkan output berikut
Print all numbers:
1
2
3
4
5
6
7
8
9
Print even numbers:
2
4
6
8
Print numbers greater than 3:
4
5
6
7
8
9
Java 8 - Metode Default
Java 8 memperkenalkan konsep baru implementasi metode default di antarmuka. Kemampuan ini ditambahkan untuk kompatibilitas mundur sehingga antarmuka lama dapat digunakan untuk memanfaatkan kemampuan ekspresi lambda Java 8.
Misalnya, antarmuka 'Daftar' atau 'Koleksi' tidak memiliki deklarasi metode 'forEach'. Jadi, menambahkan metode seperti itu hanya akan merusak implementasi kerangka kerja koleksi. Java 8 memperkenalkan metode default sehingga antarmuka Daftar/Koleksi dapat memiliki implementasi default metode forEach, dan kelas yang mengimplementasikan antarmuka ini tidak perlu mengimplementasikan hal yang sama.
Sintaks
public interface vehicle {
default void print() {
System.out.println("I am a vehicle!");
}
}
Beberapa Default
Dengan fungsi default di antarmuka, ada kemungkinan bahwa kelas mengimplementasikan dua antarmuka dengan metode default yang sama. Kode berikut menjelaskan bagaimana ambiguitas ini dapat diselesaikan.
public interface vehicle {
default void print() {
System.out.println("I am a vehicle!");
}
}
public interface fourWheeler {
default void print() {
System.out.println("I am a four wheeler!");
}
}
Solusi pertama adalah membuat metode sendiri yang menggantikan implementasi default.
public class car implements vehicle, fourWheeler {
public void print() {
System.out.println("I am a four wheeler car vehicle!");
}
}
Solusi kedua adalah memanggil metode default dari antarmuka yang ditentukan menggunakan super.
public class car implements vehicle, fourWheeler {
public void print() {
vehicle.super.print();
}
}
Metode Default Statis
Antarmuka juga dapat memiliki metode pembantu statis dari Java 8 dan seterusnya.
public interface vehicle {
default void print() {
System.out.println("I am a vehicle!");
}
static void blowHorn() {
System.out.println("Blowing horn!!!");
}
}
Contoh Metode Default
Buat program Java berikut menggunakan editor pilihan Anda, misalnya, C:\> JAVA.
Java8Tester.java
Demo Langsung
public class Java8Tester {
public static void main(String args[]) {
Vehicle vehicle = new Car();
vehicle.print();
}
}
interface Vehicle {
default void print() {
System.out.println("I am a vehicle!");
}
static void blowHorn() {
System.out.println("Blowing horn!!!");
}
}
interface FourWheeler {
default void print() {
System.out.println("I am a four wheeler!");
}
}
class Car implements Vehicle, FourWheeler {
public void print() {
Vehicle.super.print();
FourWheeler.super.print();
Vehicle.blowHorn();
System.out.println("I am a car!");
}
}
Verifikasi Hasil
Kompilasi kelas menggunakan javac kompiler sebagai berikut
C:\JAVA>javac Java8Tester.java
Sekarang jalankan Java8Tester sebagai berikut
C:\JAVA>java Java8Tester
Ini harus menghasilkan output berikut
I am a vehicle!
I am a four wheeler!
Blowing horn!!!
I am a car!
Java 8 - Streaming
Stream adalah lapisan abstrak baru yang diperkenalkan di Java 8. Dengan menggunakan stream, Anda dapat memproses data dengan cara deklaratif yang mirip dengan pernyataan SQL. Sebagai contoh, perhatikan pernyataan SQL berikut.
SELECT max(salary), employee_id, employee_name FROM Employee
Ekspresi SQL di atas secara otomatis mengembalikan detail karyawan bergaji maksimum, tanpa melakukan perhitungan apa pun di pihak pengembang. Menggunakan kerangka koleksi di Jawa, pengembang harus menggunakan loop dan melakukan pemeriksaan berulang. Kekhawatiran lain adalah efisiensi; karena prosesor multi-core tersedia dengan mudah, pengembang Java harus menulis pemrosesan kode paralel yang bisa sangat rawan kesalahan.
Untuk mengatasi masalah tersebut, Java 8 memperkenalkan konsep aliran yang memungkinkan pengembang memproses data secara deklaratif dan memanfaatkan arsitektur multicore tanpa perlu menulis kode khusus untuk itu.
Apa itu Aliran?
Stream mewakili urutan objek dari sumber, yang mendukung operasi agregat. Berikut adalah ciri-ciri Aliran −
Urutan elemen Aliran menyediakan satu set elemen tipe tertentu secara berurutan. Aliran mendapatkan/menghitung elemen sesuai permintaan. Itu tidak pernah menyimpan elemen.
Sumber Stream mengambil Koleksi, Array, atau sumber daya I/O sebagai sumber input.
Operasi agregat Aliran mendukung operasi agregat seperti filter, peta, batas, kurangi, temukan, cocokkan, dan sebagainya.
Pemipaan Sebagian besar operasi aliran mengembalikan aliran itu sendiri sehingga hasilnya dapat disalurkan. Operasi ini disebut operasi antara dan fungsinya adalah untuk mengambil input, memprosesnya, dan mengembalikan output ke target. metode collect() adalah operasi terminal yang biasanya ada di akhir operasi pemipaan untuk menandai akhir aliran.
Iterasi otomatis Operasi aliran melakukan iterasi secara internal atas elemen sumber yang disediakan, berbeda dengan Koleksi yang memerlukan iterasi eksplisit.
Menghasilkan Aliran
Dengan Java 8, antarmuka Collection memiliki dua metode untuk menghasilkan Stream.
aliran() Mengembalikan aliran berurutan dengan mempertimbangkan koleksi sebagai sumbernya.
parallelStream() Mengembalikan Aliran paralel dengan mempertimbangkan koleksi sebagai sumbernya.
Stream telah menyediakan metode baru 'forEach' untuk mengulangi setiap elemen aliran. Segmen kode berikut menunjukkan cara mencetak 10 angka acak menggunakan forEach.
Random random = new Random();
random.ints().limit(10).forEach(System.out::println);
peta
Metode 'peta' digunakan untuk memetakan setiap elemen ke hasil yang sesuai. Segmen kode berikut mencetak kotak angka unik menggunakan peta.
List<Integer> numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5);
//get list of unique squares
List<Integer> squaresList = numbers.stream().map( i -> i*i).distinct().collect(Collectors.toList());
filter
Metode 'filter' digunakan untuk menghilangkan elemen berdasarkan kriteria. Segmen kode berikut mencetak jumlah string kosong menggunakan filter.
List<String>strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");
//get count of empty string
int count = strings.stream().filter(string -> string.isEmpty()).count();
batas
Metode 'batas' digunakan untuk mengurangi ukuran aliran. Segmen kode berikut menunjukkan cara mencetak 10 angka acak menggunakan batas.
Random random = new Random();
random.ints().limit(10).forEach(System.out::println);
diurutkan
Metode 'diurutkan' digunakan untuk mengurutkan aliran. Segmen kode berikut menunjukkan cara mencetak 10 angka acak dalam urutan yang diurutkan.
Random random = new Random();
random.ints().limit(10).sorted().forEach(System.out::println);
Pemrosesan Paralel
parallelStream adalah alternatif aliran untuk pemrosesan paralel. Lihatlah segmen kode berikut yang mencetak hitungan string kosong menggunakan parallelStream.
List<String> strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");
//get count of empty string
long count = strings.parallelStream().filter(string -> string.isEmpty()).count();
Sangat mudah untuk beralih antara aliran sekuensial dan paralel.
Kolektor
Kolektor digunakan untuk menggabungkan hasil pemrosesan pada elemen aliran. Kolektor dapat digunakan untuk mengembalikan daftar atau string.
Dengan Java 8, pengumpul statistik diperkenalkan untuk menghitung semua statistik saat pemrosesan aliran sedang dilakukan.
List numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5);
IntSummaryStatistics stats = numbers.stream().mapToInt((x) -> x).summaryStatistics();
System.out.println("Highest number in List : " + stats.getMax());
System.out.println("Lowest number in List : " + stats.getMin());
System.out.println("Sum of all numbers : " + stats.getSum());
System.out.println("Average of all numbers : " + stats.getAverage());
Contoh Aliran
Buat program Java berikut menggunakan editor pilihan Anda, misalnya, C:\> JAVA.
Java8Tester.java
Demo Langsung
import java.util.ArrayList;
import java.util.Arrays;
import java.util.IntSummaryStatistics;
import java.util.List;
import java.util.Random;
import java.util.stream.Collectors;
import java.util.Map;
public class Java8Tester {
public static void main(String args[]) {
System.out.println("Using Java 7: ");
// Count empty strings
List<String> strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");
System.out.println("List: " +strings);
long count = getCountEmptyStringUsingJava7(strings);
System.out.println("Empty Strings: " + count);
count = getCountLength3UsingJava7(strings);
System.out.println("Strings of length 3: " + count);
//Eliminate empty string
List<String> filtered = deleteEmptyStringsUsingJava7(strings);
System.out.println("Filtered List: " + filtered);
//Eliminate empty string and join using comma.
String mergedString = getMergedStringUsingJava7(strings,", ");
System.out.println("Merged String: " + mergedString);
List<Integer> numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5);
//get list of square of distinct numbers
List<Integer> squaresList = getSquares(numbers);
System.out.println("Squares List: " + squaresList);
List<Integer> integers = Arrays.asList(1,2,13,4,15,6,17,8,19);
System.out.println("List: " +integers);
System.out.println("Highest number in List : " + getMax(integers));
System.out.println("Lowest number in List : " + getMin(integers));
System.out.println("Sum of all numbers : " + getSum(integers));
System.out.println("Average of all numbers : " + getAverage(integers));
System.out.println("Random Numbers: ");
//print ten random numbers
Random random = new Random();
for(int i = 0; i < 10; i++) {
System.out.println(random.nextInt());
}
System.out.println("Using Java 8: ");
System.out.println("List: " +strings);
count = strings.stream().filter(string->string.isEmpty()).count();
System.out.println("Empty Strings: " + count);
count = strings.stream().filter(string -> string.length() == 3).count();
System.out.println("Strings of length 3: " + count);
filtered = strings.stream().filter(string ->!string.isEmpty()).collect(Collectors.toList());
System.out.println("Filtered List: " + filtered);
mergedString = strings.stream().filter(string ->!string.isEmpty()).collect(Collectors.joining(", "));
System.out.println("Merged String: " + mergedString);
squaresList = numbers.stream().map( i ->i*i).distinct().collect(Collectors.toList());
System.out.println("Squares List: " + squaresList);
System.out.println("List: " +integers);
IntSummaryStatistics stats = integers.stream().mapToInt((x) ->x).summaryStatistics();
System.out.println("Highest number in List : " + stats.getMax());
System.out.println("Lowest number in List : " + stats.getMin());
System.out.println("Sum of all numbers : " + stats.getSum());
System.out.println("Average of all numbers : " + stats.getAverage());
System.out.println("Random Numbers: ");
random.ints().limit(10).sorted().forEach(System.out::println);
//parallel processing
count = strings.parallelStream().filter(string -> string.isEmpty()).count();
System.out.println("Empty Strings: " + count);
}
private static int getCountEmptyStringUsingJava7(List<String> strings) {
int count = 0;
for(String string: strings) {
if(string.isEmpty()) {
count++;
}
}
return count;
}
private static int getCountLength3UsingJava7(List<String> strings) {
int count = 0;
for(String string: strings) {
if(string.length() == 3) {
count++;
}
}
return count;
}
private static List<String> deleteEmptyStringsUsingJava7(List<String> strings) {
List<String> filteredList = new ArrayList<String>();
for(String string: strings) {
if(!string.isEmpty()) {
filteredList.add(string);
}
}
return filteredList;
}
private static String getMergedStringUsingJava7(List<String> strings, String separator) {
StringBuilder stringBuilder = new StringBuilder();
for(String string: strings) {
if(!string.isEmpty()) {
stringBuilder.append(string);
stringBuilder.append(separator);
}
}
String mergedString = stringBuilder.toString();
return mergedString.substring(0, mergedString.length()-2);
}
private static List<Integer> getSquares(List<Integer> numbers) {
List<Integer> squaresList = new ArrayList<Integer>();
for(Integer number: numbers) {
Integer square = new Integer(number.intValue() * number.intValue());
if(!squaresList.contains(square)) {
squaresList.add(square);
}
}
return squaresList;
}
private static int getMax(List<Integer> numbers) {
int max = numbers.get(0);
for(int i = 1;i < numbers.size();i++) {
Integer number = numbers.get(i);
if(number.intValue() > max) {
max = number.intValue();
}
}
return max;
}
private static int getMin(List<Integer> numbers) {
int min = numbers.get(0);
for(int i= 1;i < numbers.size();i++) {
Integer number = numbers.get(i);
if(number.intValue() < min) {
min = number.intValue();
}
}
return min;
}
private static int getSum(List numbers) {
int sum = (int)(numbers.get(0));
for(int i = 1;i < numbers.size();i++) {
sum += (int)numbers.get(i);
}
return sum;
}
private static int getAverage(List<Integer> numbers) {
return getSum(numbers) / numbers.size();
}
}
Verifikasi Hasil
Kompilasi kelas menggunakan javac kompiler sebagai berikut
C:\JAVA>javac Java8Tester.java
Sekarang jalankan Java8Tester sebagai berikut
C:\JAVA>java Java8Tester
Seharusnya menghasilkan hasil berikut
Using Java 7:
List: [abc, , bc, efg, abcd, , jkl]
Empty Strings: 2
Strings of length 3: 3
Filtered List: [abc, bc, efg, abcd, jkl]
Merged String: abc, bc, efg, abcd, jkl
Squares List: [9, 4, 49, 25]
List: [1, 2, 13, 4, 15, 6, 17, 8, 19]
Highest number in List : 19
Lowest number in List : 1
Sum of all numbers : 85
Average of all numbers : 9
Random Numbers:
-1279735475
903418352
-1133928044
-1571118911
628530462
18407523
-881538250
-718932165
270259229
421676854
Using Java 8:
List: [abc, , bc, efg, abcd, , jkl]
Empty Strings: 2
Strings of length 3: 3
Filtered List: [abc, bc, efg, abcd, jkl]
Merged String: abc, bc, efg, abcd, jkl
Squares List: [9, 4, 49, 25]
List: [1, 2, 13, 4, 15, 6, 17, 8, 19]
Highest number in List : 19
Lowest number in List : 1
Sum of all numbers : 85
Average of all numbers : 9.444444444444445
Random Numbers:
-1009474951
-551240647
-2484714
181614550
933444268
1227850416
1579250773
1627454872
1683033687
1798939493
Empty Strings: 2
Java 8 - Kelas Opsional
Opsional adalah objek wadah yang digunakan untuk memuat objek bukan nol. Objek opsional digunakan untuk mewakili null dengan nilai tidak ada. Kelas ini memiliki berbagai metode utilitas untuk memfasilitasi kode untuk menangani nilai sebagai 'tersedia' atau 'tidak tersedia' alih-alih memeriksa nilai nol. Ini diperkenalkan di Java 8 dan mirip dengan Optional yang ada di Guava.
Deklarasi Kelas
Berikut ini adalah deklarasi untuk java.util.Optional kelas
public final class Optional<T> extends Object
Metode Kelas
No.Sr.
Metode &Deskripsi
1
statis Opsional kosong()
Mengembalikan instance Opsional kosong.
2
boolean sama dengan(Objek objek)
Menunjukkan apakah beberapa objek lain "sama dengan" Opsional ini.
3
Filter Opsional(Predikat)
Jika ada nilai dan nilainya cocok dengan predikat yang diberikan, nilai tersebut akan mengembalikan Optional yang menjelaskan nilai tersebut, jika tidak mengembalikan Optional yang kosong.
4
Opsional flatMap(Fungsi> mapper)
Jika ada nilai, nilai akan menerapkan fungsi pemetaan bantalan Opsional yang disediakan, mengembalikan hasil tersebut, jika tidak mengembalikan Opsional kosong.
5
Dapatkan()
Jika ada nilai dalam Opsional ini, kembalikan nilainya, jika tidak, lemparkan NoSuchElementException.
6
int kode hash()
Mengembalikan nilai kode hash dari nilai sekarang, jika ada, atau 0 (nol) jika tidak ada nilai.
7
void ifPresent(Konsumen konsumen)
Jika ada nilai, ia akan memanggil konsumen tertentu dengan nilai tersebut, jika tidak, tidak akan melakukan apa pun.
8
boolean isPresent()
Mengembalikan nilai true jika ada nilai yang ada, jika tidak salah.
9
Opsional peta(Fungsi mapper)
Jika ada nilai, terapkan fungsi pemetaan yang disediakan padanya, dan jika hasilnya bukan nol, kembalikan Opsional yang menjelaskan hasilnya.
10
statis Opsional dari(nilai T)
Mengembalikan Opsional dengan nilai non-null saat ini yang ditentukan.
11
statis Opsional dariNullable(nilai T)
Mengembalikan Opsional yang menjelaskan nilai yang ditentukan, jika bukan nol, jika tidak mengembalikan Opsional kosong.
12
T orElse(T lainnya)
Mengembalikan nilai jika ada, jika tidak mengembalikan nilai lainnya.
13
T orElseGet(Pemasok lainnya)
Mengembalikan nilai jika ada, jika tidak memanggil yang lain dan mengembalikan hasil dari pemanggilan itu.
14
T orElseThrow(Supplier exceptionSupplier)
Mengembalikan nilai yang terkandung, jika ada, jika tidak melempar pengecualian yang akan dibuat oleh pemasok yang disediakan.
15
String toString()
Mengembalikan representasi string yang tidak kosong dari Opsional ini yang cocok untuk debugging.
Kelas ini mewarisi metode dari kelas berikut −
java.lang.Objek
Contoh Opsional
Buat program Java berikut menggunakan editor pilihan Anda, misalnya, C:\> JAVA.
Java8Tester.java
Demo Langsung
import java.util.Optional;
public class Java8Tester {
public static void main(String args[]) {
Java8Tester java8Tester = new Java8Tester();
Integer value1 = null;
Integer value2 = new Integer(10);
//Optional.ofNullable - allows passed parameter to be null.
Optional<Integer> a = Optional.ofNullable(value1);
//Optional.of - throws NullPointerException if passed parameter is null
Optional<Integer> b = Optional.of(value2);
System.out.println(java8Tester.sum(a,b));
}
public Integer sum(Optional<Integer> a, Optional<Integer> b) {
//Optional.isPresent - checks the value is present or not
System.out.println("First parameter is present: " + a.isPresent());
System.out.println("Second parameter is present: " + b.isPresent());
//Optional.orElse - returns the value if present otherwise returns
//the default value passed.
Integer value1 = a.orElse(new Integer(0));
//Optional.get - gets the value, value should be present
Integer value2 = b.get();
return value1 + value2;
}
}
Verifikasi Hasil
Kompilasi kelas menggunakan javac kompiler sebagai berikut
C:\JAVA>javac Java8Tester.java
Sekarang jalankan Java8Tester sebagai berikut
C:\JAVA>java Java8Tester
Ini harus menghasilkan output berikut
First parameter is present: false
Second parameter is present: true
10
Java 8 - JavaScript Nashorn
Dengan Java 8, Nashorn, mesin javascript yang jauh lebih baik diperkenalkan, untuk menggantikan Rhino yang ada. Nashorn memberikan kinerja 2 hingga 10 kali lebih baik, karena secara langsung mengkompilasi kode dalam memori dan meneruskan bytecode ke JVM. Nashorn menggunakan fitur panggilan dinamis, yang diperkenalkan di Java 7 untuk meningkatkan kinerja.
jjs
Untuk mesin Nashorn, JAVA 8 memperkenalkan alat baris perintah baru, jjs, untuk mengeksekusi kode javascript di konsol.
Menafsirkan File js
Buat dan simpan file sample.js di c:\> folder JAVA.
C:\JAVA> jjs -- a b c
jjs> print('letters: ' +arguments.join(", "))
letters: a, b, c
jjs>
Memanggil JavaScript dari Java
Menggunakan ScriptEngineManager, kode JavaScript dapat dipanggil dan diinterpretasikan dalam Java.
Contoh
Buat program Java berikut menggunakan editor pilihan Anda, misalnya, C:\> JAVA.
Java8Tester.java
Demo Langsung
import javax.script.ScriptEngineManager;
import javax.script.ScriptEngine;
import javax.script.ScriptException;
public class Java8Tester {
public static void main(String args[]) {
ScriptEngineManager scriptEngineManager = new ScriptEngineManager();
ScriptEngine nashorn = scriptEngineManager.getEngineByName("nashorn");
String name = "Mahesh";
Integer result = null;
try {
nashorn.eval("print('" + name + "')");
result = (Integer) nashorn.eval("10 + 2");
} catch(ScriptException e) {
System.out.println("Error executing script: "+ e.getMessage());
}
System.out.println(result.toString());
}
}
Verifikasi Hasil
Kompilasi kelas menggunakan javac kompiler sebagai berikut
C:\JAVA>javac Java8Tester.java
Sekarang jalankan Java8Tester sebagai berikut
C:\JAVA>java Java8Tester
Seharusnya menghasilkan hasil berikut
Mahesh
12
Memanggil Java dari JavaScript
Contoh berikut menjelaskan cara mengimpor dan menggunakan kelas Java dalam skrip java.
Buat dan simpan sample.js di c:\> folder JAVA.
contoh.js
var BigDecimal = Java.type('java.math.BigDecimal');
function calculate(amount, percentage) {
var result = new BigDecimal(amount).multiply(new BigDecimal(percentage)).divide(
new BigDecimal("100"), 2, BigDecimal.ROUND_HALF_EVEN);
return result.toPlainString();
}
var result = calculate(568000000000000000023,13.9);
print(result);
Buka konsol dan gunakan perintah berikut.
C:\JAVA>jjs sample.js
Ini harus menghasilkan output berikut
78952000000000000003.20
Java 8 - API Tanggal/Waktu Baru
Dengan Java 8, API Tanggal-Waktu baru diperkenalkan untuk menutupi kelemahan API tanggal-waktu lama berikut.
Tidak aman untuk utas java.util.Date tidak thread aman, sehingga pengembang harus berurusan dengan masalah konkurensi saat menggunakan tanggal. API tanggal-waktu yang baru tidak dapat diubah dan tidak memiliki metode penyetel.
Desain buruk Tanggal Default dimulai dari 1900, bulan dimulai dari 1, dan hari dimulai dari 0, jadi tidak ada keseragaman. API lama memiliki lebih sedikit metode langsung untuk operasi tanggal. API baru menyediakan banyak metode utilitas untuk operasi semacam itu.
Penanganan zona waktu yang sulit Pengembang harus menulis banyak kode untuk menangani masalah zona waktu. API baru telah dikembangkan dengan mempertimbangkan desain khusus domain.
Java 8 memperkenalkan API tanggal-waktu baru di bawah paket java.time. Berikut adalah beberapa kelas penting yang diperkenalkan dalam paket java.time.
Lokal API tanggal-waktu yang disederhanakan tanpa kerumitan penanganan zona waktu.
Dikategorikan API tanggal-waktu khusus untuk menangani berbagai zona waktu.
API Tanggal-Waktu Lokal
Kelas LocalDate/LocalTime dan LocalDateTime menyederhanakan pengembangan di mana zona waktu tidak diperlukan. Mari kita lihat mereka beraksi.
Buat program java berikut menggunakan editor pilihan Anda, misalnya, C:\> JAVA.
Java8Tester.java
Demo Langsung
import java.time.LocalDate;
import java.time.LocalTime;
import java.time.LocalDateTime;
import java.time.Month;
public class Java8Tester {
public static void main(String args[]) {
Java8Tester java8tester = new Java8Tester();
java8tester.testLocalDateTime();
}
public void testLocalDateTime() {
// Get the current date and time
LocalDateTime currentTime = LocalDateTime.now();
System.out.println("Current DateTime: " + currentTime);
LocalDate date1 = currentTime.toLocalDate();
System.out.println("date1: " + date1);
Month month = currentTime.getMonth();
int day = currentTime.getDayOfMonth();
int seconds = currentTime.getSecond();
System.out.println("Month: " + month +"day: " + day +"seconds: " + seconds);
LocalDateTime date2 = currentTime.withDayOfMonth(10).withYear(2012);
System.out.println("date2: " + date2);
//12 december 2014
LocalDate date3 = LocalDate.of(2014, Month.DECEMBER, 12);
System.out.println("date3: " + date3);
//22 hour 15 minutes
LocalTime date4 = LocalTime.of(22, 15);
System.out.println("date4: " + date4);
//parse a string
LocalTime date5 = LocalTime.parse("20:15:30");
System.out.println("date5: " + date5);
}
}
Verifikasi Hasil
Kompilasi kelas menggunakan javac kompiler sebagai berikut
API tanggal-waktu yang dikategorikan akan digunakan ketika zona waktu dipertimbangkan. Mari kita lihat mereka beraksi.
Buat program Java berikut menggunakan editor pilihan Anda, misalnya, C:\> JAVA.
Java8Tester.java
Demo Langsung
import java.time.ZonedDateTime;
import java.time.ZoneId;
public class Java8Tester {
public static void main(String args[]) {
Java8Tester java8tester = new Java8Tester();
java8tester.testZonedDateTime();
}
public void testZonedDateTime() {
// Get the current date and time
ZonedDateTime date1 = ZonedDateTime.parse("2007-12-03T10:15:30+05:30[Asia/Karachi]");
System.out.println("date1: " + date1);
ZoneId id = ZoneId.of("Europe/Paris");
System.out.println("ZoneId: " + id);
ZoneId currentZone = ZoneId.systemDefault();
System.out.println("CurrentZone: " + currentZone);
}
}
Verifikasi Hasil
Kompilasi kelas menggunakan javac kompiler sebagai berikut
java.time.temporal.ChronoUnit enum ditambahkan di Java 8 untuk menggantikan nilai integer yang digunakan di API lama untuk mewakili hari, bulan, dll. Mari kita lihat mereka beraksi.
Buat program Java berikut menggunakan editor pilihan Anda, misalnya, C:\> JAVA.
Java8Tester.java
Demo Langsung
import java.time.LocalDate;
import java.time.temporal.ChronoUnit;
public class Java8Tester {
public static void main(String args[]) {
Java8Tester java8tester = new Java8Tester();
java8tester.testChromoUnits();
}
public void testChromoUnits() {
//Get the current date
LocalDate today = LocalDate.now();
System.out.println("Current date: " + today);
//add 1 week to the current date
LocalDate nextWeek = today.plus(1, ChronoUnit.WEEKS);
System.out.println("Next week: " + nextWeek);
//add 1 month to the current date
LocalDate nextMonth = today.plus(1, ChronoUnit.MONTHS);
System.out.println("Next month: " + nextMonth);
//add 1 year to the current date
LocalDate nextYear = today.plus(1, ChronoUnit.YEARS);
System.out.println("Next year: " + nextYear);
//add 10 years to the current date
LocalDate nextDecade = today.plus(1, ChronoUnit.DECADES);
System.out.println("Date after ten year: " + nextDecade);
}
}
Verifikasi Hasil
Kompilasi kelas menggunakan javac kompiler sebagai berikut
C:\JAVA>javac Java8Tester.java
Sekarang jalankan Java8Tester sebagai berikut
C:\JAVA>java Java8Tester
Seharusnya menghasilkan hasil berikut
Current date: 2014-12-10
Next week: 2014-12-17
Next month: 2015-01-10
Next year: 2015-12-10
Date after ten year: 2024-12-10
Periode dan Durasi
Dengan Java 8, dua kelas khusus diperkenalkan untuk menangani perbedaan waktu.
Periode Ini berkaitan dengan jumlah waktu berdasarkan tanggal.
Durasi Ini berkaitan dengan jumlah waktu berdasarkan waktu.
Mari kita lihat mereka beraksi.
Buat program Java berikut menggunakan editor pilihan Anda, misalnya, C:\> JAVA.
Java8Tester.java
Demo Langsung
import java.time.temporal.ChronoUnit;
import java.time.LocalDate;
import java.time.LocalTime;
import java.time.Duration;
import java.time.Period;
public class Java8Tester {
public static void main(String args[]) {
Java8Tester java8tester = new Java8Tester();
java8tester.testPeriod();
java8tester.testDuration();
}
public void testPeriod() {
//Get the current date
LocalDate date1 = LocalDate.now();
System.out.println("Current date: " + date1);
//add 1 month to the current date
LocalDate date2 = date1.plus(1, ChronoUnit.MONTHS);
System.out.println("Next month: " + date2);
Period period = Period.between(date2, date1);
System.out.println("Period: " + period);
}
public void testDuration() {
LocalTime time1 = LocalTime.now();
Duration twoHours = Duration.ofHours(2);
LocalTime time2 = time1.plus(twoHours);
Duration duration = Duration.between(time1, time2);
System.out.println("Duration: " + duration);
}
}
Verifikasi Hasil
Kompilasi kelas menggunakan javac kompiler sebagai berikut
C:\JAVA>javac Java8Tester.java
Sekarang jalankan Java8Tester sebagai berikut
C:\JAVA>java Java8Tester
Ini harus menghasilkan output berikut
Current date: 2014-12-10
Next month: 2015-01-10
Period: P-1M
Duration: PT2H
Pengatur Sementara
TemporalAdjuster digunakan untuk melakukan matematika tanggal. Misalnya, dapatkan "Sabtu Kedua Bulan Ini" atau "Selasa Berikutnya". Mari kita lihat mereka beraksi.
Buat program Java berikut menggunakan editor pilihan Anda, misalnya, C:\> JAVA.
Java8Tester.java
Demo Langsung
import java.time.LocalDate;
import java.time.temporal.TemporalAdjusters;
import java.time.DayOfWeek;
public class Java8Tester {
public static void main(String args[]) {
Java8Tester java8tester = new Java8Tester();
java8tester.testAdjusters();
}
public void testAdjusters() {
//Get the current date
LocalDate date1 = LocalDate.now();
System.out.println("Current date: " + date1);
//get the next tuesday
LocalDate nextTuesday = date1.with(TemporalAdjusters.next(DayOfWeek.TUESDAY));
System.out.println("Next Tuesday on : " + nextTuesday);
//get the second saturday of next month
LocalDate firstInYear = LocalDate.of(date1.getYear(),date1.getMonth(), 1);
LocalDate secondSaturday = firstInYear.with(TemporalAdjusters.nextOrSame(
DayOfWeek.SATURDAY)).with(TemporalAdjusters.next(DayOfWeek.SATURDAY));
System.out.println("Second Saturday on : " + secondSaturday);
}
}
Verifikasi Hasil
Kompilasi kelas menggunakan javac kompiler sebagai berikut
C:\JAVA>javac Java8Tester.java
Sekarang jalankan Java8Tester sebagai berikut
C:\JAVA>java Java8Tester
Seharusnya menghasilkan hasil berikut
Current date: 2014-12-10
Next Tuesday on : 2014-12-16
Second Saturday on : 2014-12-13
Kompatibilitas Mundur
Metode toInstant() ditambahkan ke objek Tanggal dan Kalender asli, yang dapat digunakan untuk mengonversinya ke API Tanggal-Waktu yang baru. Gunakan metode ofInstant(Insant,ZoneId) untuk mendapatkan objek LocalDateTime atau ZonedDateTime. Mari kita lihat mereka beraksi.
Buat program Java berikut menggunakan editor pilihan Anda, misalnya, C:\> JAVA.
Java8Tester.java
Demo Langsung
import java.time.LocalDateTime;
import java.time.ZonedDateTime;
import java.util.Date;
import java.time.Instant;
import java.time.ZoneId;
public class Java8Tester {
public static void main(String args[]) {
Java8Tester java8tester = new Java8Tester();
java8tester.testBackwardCompatability();
}
public void testBackwardCompatability() {
//Get the current date
Date currentDate = new Date();
System.out.println("Current date: " + currentDate);
//Get the instant of current date in terms of milliseconds
Instant now = currentDate.toInstant();
ZoneId currentZone = ZoneId.systemDefault();
LocalDateTime localDateTime = LocalDateTime.ofInstant(now, currentZone);
System.out.println("Local date: " + localDateTime);
ZonedDateTime zonedDateTime = ZonedDateTime.ofInstant(now, currentZone);
System.out.println("Zoned date: " + zonedDateTime);
}
}
Verifikasi Hasil
Kompilasi kelas menggunakan javac kompiler sebagai berikut
C:\JAVA>javac Java8Tester.java
Sekarang jalankan Java8Tester sebagai berikut
C:\JAVA>java Java8Tester
Ini harus menghasilkan output berikut
Current date: Wed Dec 10 05:44:06 UTC 2014
Local date: 2014-12-10T05:44:06.635
Zoned date: 2014-12-10T05:44:06.635Z[Etc/UTC]
Java 8 - Base64
Dengan Java 8, Base64 akhirnya mendapatkan haknya. Java 8 sekarang memiliki encoder dan decoder bawaan untuk pengkodean Base64. Di Java 8, kita dapat menggunakan tiga jenis pengkodean Base64.
Sederhana Output dipetakan ke satu set karakter yang terletak di A-Za-z0-9+/. Encoder tidak menambahkan feed baris apa pun dalam output, dan decoder menolak karakter apa pun selain A-Za-z0-9+/.
URL Output dipetakan ke set karakter yang terletak di A-Za-z0-9+_. Outputnya adalah URL dan nama file aman.
MIME Output dipetakan ke format ramah MIME. Output direpresentasikan dalam baris masing-masing tidak lebih dari 76 karakter, dan menggunakan carriage return '\r' diikuti oleh linefeed '\n' sebagai pemisah baris. Tidak ada pemisah baris di akhir keluaran yang disandikan.
Kelas Bersarang
No.Sr.
Kelas &Deskripsi bersarang
1
kelas statis Base64.Decoder
Kelas ini mengimplementasikan dekoder untuk mendekode data byte menggunakan skema pengkodean Base64 seperti yang ditentukan dalam RFC 4648 dan RFC 2045.
2
kelas statis Base64.Encoder
Kelas ini mengimplementasikan encoder untuk encoding data byte menggunakan skema encoding Base64 seperti yang ditentukan dalam RFC 4648 dan RFC 2045.
Metode
No.Sr.
Nama &Deskripsi Metode
1
Base64.Decoder statis getDecoder()
Mengembalikan Base64.Decoder yang mendekode menggunakan skema pengkodean base64 tipe Dasar.
2
Base64.Encoder statis getEncoder()
Mengembalikan Base64.Encoder yang dikodekan menggunakan skema pengkodean base64 tipe Dasar.
3
Base64.Decoder statis getMimeDecoder()
Mengembalikan Base64.Decoder yang mendekode menggunakan skema dekode base64 tipe MIME.
4
Base64.Encoder statis getMimeEncoder()
Mengembalikan Base64.Encoder yang dikodekan menggunakan skema pengkodean base64 tipe MIME.