산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> java

자바 8 - 빠른 가이드

자바 8 - 개요

JAVA 8은 JAVA 프로그래밍 언어 개발의 주요 기능 릴리스입니다. 초기 버전은 2014년 3월 18일에 릴리스되었습니다. Java 8 릴리스와 함께 Java는 함수형 프로그래밍, 새로운 JavaScript 엔진, 날짜 시간 조작을 위한 새로운 API, 새로운 스트리밍 API 등을 지원했습니다.

새로운 기능

다음 코드 스니펫을 고려하십시오.

라이브 데모
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));
   }
}

프로그램을 실행하면 다음과 같은 결과를 얻을 수 있습니다.

Sort using Java 7 syntax:
[ Kalpesh Mahesh Naresh Ramesh Suresh ]
Sort using Java 8 syntax:
[ Kalpesh Mahesh Naresh Ramesh Suresh ]

여기 sortUsingJava8() 메소드는 정렬 기준을 얻기 위해 매개변수로 람다 표현식과 함께 정렬 함수를 사용합니다.

자바 8 - 환경 설정

로컬 환경 설정

Java 프로그래밍 언어에 대한 자체 환경을 설정하려는 경우 이 섹션에서 전체 프로세스를 안내합니다. Java 환경을 설정하려면 아래 단계를 따르십시오.

Java SE는 다음 링크에서 무료로 다운로드할 수 있습니다 -

https://www.oracle.com/technetwork/java/javase/downloads/index-jsp-138363.html

운영 체제에 따라 버전을 다운로드합니다.

지침에 따라 Java를 다운로드하고 .exe를 실행합니다. 컴퓨터에 Java를 설치합니다. 컴퓨터에 Java를 설치했으면 올바른 설치 디렉토리를 가리키도록 환경 변수를 설정해야 합니다.

Windows 2000/XP용 경로 설정

c:\Program Files\java\jdk 디렉토리에 Java를 설치했다고 가정 -

Windows 95/98/ME용 경로 설정

c:\Program Files\java\jdk 디렉토리에 Java를 설치했다고 가정 -

Linux, UNIX, Solaris, FreeBSD의 경로 설정

환경 변수 PATH는 Java 바이너리가 설치된 위치를 가리키도록 설정해야 합니다. 이 작업을 수행하는 데 문제가 있으면 셸 설명서를 참조하세요.

예를 들어, bash를 셸로 사용하는 경우 '.bashrc:export PATH=/path/to/java:$PATH'

끝에 다음 줄을 추가합니다.

인기 자바 편집기

Java 프로그램을 작성하려면 텍스트 편집기가 필요합니다. 시장에는 훨씬 더 정교한 IDE가 있습니다. 그러나 지금은 다음 중 하나를 고려할 수 있습니다. -

자바 8 - 람다 표현식

Lambda 표현식은 Java 8에 도입되었으며 Java 8의 가장 큰 기능으로 선전됩니다. Lambda 표현식은 함수형 프로그래밍을 용이하게 하고 개발을 크게 단순화합니다.

구문

람다 식의 특징은 다음 구문입니다.

parameter -> expression body

다음은 람다 식의 중요한 특성입니다.

람다 표현식 예

예를 들어 C:\> JAVA.

에서 원하는 편집기를 사용하여 다음 Java 프로그램을 만듭니다.

Java8Tester.java

라이브 데모
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);
   }
}

결과 확인

javac를 사용하여 클래스 컴파일 다음과 같이 컴파일러 -

C:\JAVA>javac Java8Tester.java

이제 다음과 같이 Java8Tester를 실행하십시오 -

C:\JAVA>java Java8Tester

다음 출력을 생성해야 합니다 -

10 + 5 = 15
10 - 5 = 5
10 x 5 = 50
10 / 5 = 2
Hello Mahesh
Hello Suresh

위의 예에서 고려해야 할 중요한 사항은 다음과 같습니다.

범위

람다 식을 사용하면 모든 최종 변수 또는 사실상 최종 변수(한 번만 할당됨)를 참조할 수 있습니다. 변수에 두 번째로 값이 할당되면 Lambda 표현식에서 컴파일 오류가 발생합니다.

범위 예

예를 들어 C:\> JAVA.

에서 원하는 편집기를 사용하여 다음 Java 프로그램을 만듭니다.

Java8Tester.java

라이브 데모
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);
   }
}

결과 확인

javac를 사용하여 클래스 컴파일 다음과 같이 컴파일러 -

C:\JAVA>javac Java8Tester.java

이제 다음과 같이 Java8Tester를 실행하십시오 -

C:\JAVA>java Java8Tester

다음 출력을 생성해야 합니다 -

Hello! Mahesh

자바 8 - 메소드 참조

메서드 참조는 이름으로 메서드를 가리키는 데 도움이 됩니다. 메소드 참조는 "::" 기호를 사용하여 설명됩니다. 메소드 참조는 다음 유형의 메소드를 가리키는 데 사용할 수 있습니다. -

방법 참조 예

예를 들어 C:\> JAVA.

에서 원하는 편집기를 사용하여 다음 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);
   }
}

여기에 System.out::println 메서드를 정적 메서드 참조로 전달했습니다.

결과 확인

javac를 사용하여 클래스 컴파일 다음과 같이 컴파일러 -

C:\JAVA>javac Java8Tester.java

이제 다음과 같이 Java8Tester를 실행하십시오 -

C:\JAVA>java Java8Tester

다음 출력을 생성해야 합니다 -

Mahesh
Suresh
Ramesh
Naresh
Kalpesh

자바 8 - 기능적 인터페이스

기능적 인터페이스에는 표시할 단일 기능이 있습니다. 예를 들어, 단일 메소드 'compareTo'가 있는 Comparable 인터페이스는 비교 목적으로 사용됩니다. Java 8은 람다 식에서 광범위하게 사용되는 많은 기능적 인터페이스를 정의했습니다. 다음은 java.util.Function 패키지에 정의된 기능 인터페이스 목록입니다.


시니어 번호 인터페이스 및 설명
1

바이컨슈머

두 개의 입력 인수를 받아들이고 결과를 반환하지 않는 작업을 나타냅니다.

2

바이펑션

두 개의 인수를 받아 결과를 생성하는 함수를 나타냅니다.

3

이진 연산자

동일한 유형의 두 피연산자에 대한 연산을 나타내며 피연산자와 동일한 유형의 결과를 생성합니다.

4

BiPredicate

두 인수의 술어(부울 값 함수)를 나타냅니다.

5

부울 공급업체

부울 값 결과의 공급자를 나타냅니다.

6

소비자

단일 입력 인수를 받아들이고 결과를 반환하지 않는 작업을 나타냅니다.

7

이중 바이너리 연산자

두 개의 이중 값 피연산자에 대한 연산을 나타내며 이중 값 결과를 생성합니다.

8

이중 소비자

단일 이중 값 인수를 허용하고 결과를 반환하지 않는 연산을 나타냅니다.

9

이중 기능

이중 값 인수를 허용하고 결과를 생성하는 함수를 나타냅니다.

10

이중 술어

하나의 이중 값 인수의 술어(부울 값 함수)를 나타냅니다.

11

이중 공급업체

이중 가치 결과의 공급자를 나타냅니다.

12

DoubleToIntFunction

이중 값 인수를 허용하고 int 값 결과를 생성하는 함수를 나타냅니다.

13

DoubleToLongFunction

이중 값 인수를 허용하고 긴 값 결과를 생성하는 함수를 나타냅니다.

14

DoubleUnaryOperator

이중 값 결과를 생성하는 단일 이중 값 피연산자에 대한 연산을 나타냅니다.

15

기능

하나의 인수를 받아 결과를 생성하는 함수를 나타냅니다.

16

IntBinaryOperator

두 개의 int 값 피연산자에 대한 연산을 나타내며 int 값 결과를 생성합니다.

17

IntConsumer

단일 int 값 인수를 허용하고 결과를 반환하지 않는 작업을 나타냅니다.

18

IntFunction

int 값 인수를 받아들이고 결과를 생성하는 함수를 나타냅니다.

19

IntPredicate

하나의 int 값 인수의 술어(부울 값 함수)를 나타냅니다.

20

IntSupplier

정수 값 결과의 공급자를 나타냅니다.

21

IntToDoubleFunction

int 값 인수를 허용하고 이중 값 결과를 생성하는 함수를 나타냅니다.

22

IntToLongFunction

int 값 인수를 받아들이고 긴 값 결과를 생성하는 함수를 나타냅니다.

23

IntUnaryOperator

int 값 결과를 생성하는 단일 int 값 피연산자에 대한 연산을 나타냅니다.

24

LongBinaryOperator

두 개의 긴 값 피연산자에 대한 연산을 나타내며 긴 값의 결과를 생성합니다.

25

장기 소비자

하나의 긴 값 인수를 허용하고 결과를 반환하지 않는 작업을 나타냅니다.

26

장기능

긴 값의 인수를 받아 결과를 생성하는 함수를 나타냅니다.

27

LongPredicate

하나의 긴 값 인수의 술어(부울 값 함수)를 나타냅니다.

28

장기 공급업체

오랫동안 가치 있는 결과를 제공하는 공급자를 나타냅니다.

29

LongToDoubleFunction

긴 값 인수를 허용하고 이중 값 결과를 생성하는 함수를 나타냅니다.

30

LongToIntFunction

긴 값 인수를 허용하고 int 값 결과를 생성하는 함수를 나타냅니다.

31

LongUnaryOperator

긴 값 결과를 생성하는 단일 긴 값 피연산자에 대한 연산을 나타냅니다.

32

ObjDoubleConsumer

개체 값 및 이중 값 인수를 허용하고 결과를 반환하지 않는 작업을 나타냅니다.

33

ObjIntConsumer

개체 값 및 int 값 인수를 허용하고 결과를 반환하지 않는 작업을 나타냅니다.

34

ObjLongConsumer

개체 값 및 긴 값 인수를 허용하고 결과를 반환하지 않는 작업을 나타냅니다.

35

술어

한 인수의 술어(부울 값 함수)를 나타냅니다.

36

공급업체

결과 공급자를 나타냅니다.

37

ToDoubleBiFunction

두 개의 인수를 허용하고 이중 값 결과를 생성하는 함수를 나타냅니다.

38

ToDoubleFunction

이중 값 결과를 생성하는 함수를 나타냅니다.

39

ToIntBiFunction

두 개의 인수를 허용하고 int 값 결과를 생성하는 함수를 나타냅니다.

40

ToIntFunction

정수 값 결과를 생성하는 함수를 나타냅니다.

41

ToLongBiFunction

두 개의 인수를 허용하고 긴 값의 결과를 생성하는 함수를 나타냅니다.

42

ToLongFunction

긴 값을 생성하는 함수를 나타냅니다.

43

단항 연산자

피연산자와 동일한 유형의 결과를 생성하는 단일 피연산자에 대한 연산을 나타냅니다.


기능 인터페이스 예

술어 인터페이스는 부울 값을 반환하는 test(Object) 메서드가 있는 기능적 인터페이스입니다. 이 인터페이스는 개체가 참 또는 거짓으로 테스트되었음을 ​​나타냅니다.

예를 들어 C:\> JAVA.

에서 원하는 편집기를 사용하여 다음 Java 프로그램을 만듭니다.

Java8Tester.java

라이브 데모
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 + " ");
         }
      }
   }
}

여기에서는 단일 입력을 받고 부울을 반환하는 Predicate 인터페이스를 전달했습니다.

결과 확인

javac를 사용하여 클래스 컴파일 다음과 같이 컴파일러 -

C:\JAVA>javac Java8Tester.java

이제 다음과 같이 Java8Tester를 실행하십시오 -

C:\JAVA>java Java8Tester

다음 출력을 생성해야 합니다 -

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

자바 8 - 기본 메소드

Java 8은 인터페이스에 기본 메소드 구현이라는 새로운 개념을 도입했습니다. 이 기능은 이전 인터페이스를 사용하여 Java 8의 람다 표현식 기능을 활용할 수 있도록 이전 버전과의 호환성을 위해 추가되었습니다.

예를 들어 'List' 또는 'Collection' 인터페이스에는 'forEach' 메서드 선언이 없습니다. 따라서 이러한 메서드를 추가하면 컬렉션 프레임워크 구현이 중단됩니다. Java 8은 List/Collection 인터페이스가 forEach 메소드의 기본 구현을 가질 수 있도록 기본 메소드를 도입했으며 이러한 인터페이스를 구현하는 클래스는 동일하게 구현할 필요가 없습니다.

구문

public interface vehicle {

   default void print() {
      System.out.println("I am a vehicle!");
   }
}

다중 기본값

인터페이스의 기본 기능을 사용하면 클래스가 동일한 기본 메서드를 사용하여 두 개의 인터페이스를 구현할 가능성이 있습니다. 다음 코드는 이 모호성을 해결하는 방법을 설명합니다.

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!");
   }
}

첫 번째 솔루션은 기본 구현을 재정의하는 고유한 메서드를 만드는 것입니다.

public class car implements vehicle, fourWheeler {

   public void print() {
      System.out.println("I am a four wheeler car vehicle!");
   }
}

두 번째 해결책은 super를 사용하여 지정된 인터페이스의 기본 메소드를 호출하는 것입니다.

public class car implements vehicle, fourWheeler {

   public void print() {
      vehicle.super.print();
   }
}

정적 기본 방법

인터페이스에는 Java 8 이후의 정적 도우미 메서드도 포함될 수 있습니다.

public interface vehicle {

   default void print() {
      System.out.println("I am a vehicle!");
   }
	
   static void blowHorn() {
      System.out.println("Blowing horn!!!");
   }
}

기본 메소드 예

예를 들어 C:\> JAVA.

에서 원하는 편집기를 사용하여 다음 Java 프로그램을 만듭니다.

Java8Tester.java

라이브 데모
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!");
   }
}

결과 확인

javac를 사용하여 클래스 컴파일 다음과 같이 컴파일러 -

C:\JAVA>javac Java8Tester.java

이제 다음과 같이 Java8Tester를 실행하십시오 -

C:\JAVA>java Java8Tester

다음 출력을 생성해야 합니다 -

I am a vehicle!
I am a four wheeler!
Blowing horn!!!
I am a car!

자바 8 - 스트림

스트림은 Java 8에 도입된 새로운 추상 계층입니다. 스트림을 사용하면 SQL 문과 유사한 선언적 방식으로 데이터를 처리할 수 있습니다. 예를 들어, 다음 SQL 문을 고려하십시오.

SELECT max(salary), employee_id, employee_name FROM Employee

위의 SQL 표현식은 개발자 측에서 계산하지 않고 최대 급여 직원의 세부 정보를 자동으로 반환합니다. 개발자는 Java의 컬렉션 프레임워크를 사용하여 루프를 사용하고 반복적으로 확인해야 합니다. 또 다른 문제는 효율성입니다. 멀티 코어 프로세서를 쉽게 사용할 수 있으므로 Java 개발자는 오류가 발생하기 쉬운 병렬 코드 처리를 작성해야 합니다.

이러한 문제를 해결하기 위해 Java 8은 개발자가 데이터를 선언적으로 처리하고 특정 코드를 작성할 필요 없이 멀티코어 아키텍처를 활용할 수 있도록 하는 스트림 개념을 도입했습니다.

스트림이란 무엇입니까?

Stream은 집계 작업을 지원하는 소스의 개체 시퀀스를 나타냅니다. 다음은 스트림의 특성입니다 -

스트림 생성

Java 8에서는 Collection 인터페이스에 스트림을 생성하는 두 가지 방법이 있습니다.

List<String> strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");
List<String> filtered = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.toList());

forEach

스트림은 스트림의 각 요소를 반복하기 위해 새로운 메소드 'forEach'를 제공했습니다. 다음 코드 부분은 forEach를 사용하여 10개의 난수를 인쇄하는 방법을 보여줍니다.

Random random = new Random();
random.ints().limit(10).forEach(System.out::println);

지도

'map' 메서드는 각 요소를 해당 결과에 매핑하는 데 사용됩니다. 다음 코드 세그먼트는 지도를 사용하여 고유한 숫자 제곱을 인쇄합니다.

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());

필터

'필터' 방법은 기준에 따라 요소를 제거하는 데 사용됩니다. 다음 코드 세그먼트는 필터를 사용하여 빈 문자열 수를 인쇄합니다.

List<String>strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");

//get count of empty string
int count = strings.stream().filter(string -> string.isEmpty()).count();

한도

'limit' 방법은 스트림의 크기를 줄이는 데 사용됩니다. 다음 코드 부분은 limit를 사용하여 10개의 난수를 인쇄하는 방법을 보여줍니다.

Random random = new Random();
random.ints().limit(10).forEach(System.out::println);

정렬

'sorted' 메소드는 스트림을 정렬하는 데 사용됩니다. 다음 코드 부분은 10개의 난수를 정렬된 순서로 인쇄하는 방법을 보여줍니다.

Random random = new Random();
random.ints().limit(10).sorted().forEach(System.out::println);

병렬 처리

parallelStream은 병렬 처리를 위한 스트림의 대안입니다. 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();

순차 스트림과 병렬 스트림 사이를 전환하는 것은 매우 쉽습니다.

수집가

수집기는 스트림 요소에 대한 처리 결과를 결합하는 데 사용됩니다. 수집기를 사용하여 목록이나 문자열을 반환할 수 있습니다.

List<String>strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");
List<String> filtered = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.toList());

System.out.println("Filtered List: " + filtered);
String mergedString = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.joining(", "));
System.out.println("Merged String: " + mergedString);

통계

Java 8에서는 스트림 처리가 완료될 때 모든 통계를 계산하기 위해 통계 수집기가 도입되었습니다.

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());

스트림 예

예를 들어 C:\> JAVA.

에서 원하는 편집기를 사용하여 다음 Java 프로그램을 만듭니다.

Java8Tester.java

라이브 데모
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();
   }
}

결과 확인

javac를 사용하여 클래스 컴파일 다음과 같이 컴파일러 -

C:\JAVA>javac Java8Tester.java

이제 다음과 같이 Java8Tester를 실행하십시오 -

C:\JAVA>java Java8Tester

다음 결과를 생성해야 합니다 -

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

자바 8 - 선택적 클래스

선택적은 null이 아닌 개체를 포함하는 데 사용되는 컨테이너 개체입니다. 선택적 개체는 값이 없는 null을 나타내는 데 사용됩니다. 이 클래스에는 null 값을 확인하는 대신 '사용 가능' 또는 '사용 불가능'으로 값을 처리하는 코드를 용이하게 하는 다양한 유틸리티 메서드가 있습니다. Java 8에 도입되었으며 Guava의 Optional과 유사합니다.

클래스 선언

다음은 java.util.Optional에 대한 선언입니다. 클래스 -

public final class Optional<T> extends Object

클래스 메소드

시니어 번호 방법 및 설명
1

정적 선택사항 empty()

빈 Optional 인스턴스를 반환합니다.

2

부울 등호(객체 obj)

일부 다른 개체가 이 선택 항목과 "동일한"지 여부를 나타냅니다.

3

선택적 필터(Predicate predicate)

값이 있고 값이 주어진 술어와 일치하면 값을 설명하는 Optional을 반환하고 그렇지 않으면 빈 Optional을 반환합니다.

4

선택사항 flatMap(Function> 매퍼)

값이 있으면 제공된 Optional 베어링 매핑 기능을 적용하고 해당 결과를 반환하고 그렇지 않으면 빈 Optional을 반환합니다.

5

얻기()

이 Optional에 값이 있으면 값을 반환하고, 그렇지 않으면 NoSuchElementException을 발생시킵니다.

6

int hashCode()

현재 값의 해시 코드 값(있는 경우) 또는 값이 없는 경우 0(영)을 반환합니다.

7

void ifPresent(소비자 소비자)

값이 있으면 값으로 지정된 소비자를 호출하고, 그렇지 않으면 아무 작업도 수행하지 않습니다.

8

부울 isPresent()

값이 있으면 true를 반환하고 그렇지 않으면 false를 반환합니다.

9

선택적 map(Function mapper)

값이 있으면 제공된 매핑 함수를 적용하고 결과가 null이 아니면 결과를 설명하는 Optional을 반환합니다.

10

정적 선택 of(T 값)

현재 null이 아닌 값이 지정된 Optional을 반환합니다.

11

정적 선택적 ofNullable(T 값)

null이 아닌 경우 지정된 값을 설명하는 Optional을 반환하고, 그렇지 않으면 빈 Optional을 반환합니다.

12

또는 기타(기타)

값이 있으면 반환하고 그렇지 않으면 다른 값을 반환합니다.

13

T orElseGet(Supplier other)

존재하는 경우 값을 반환하고, 그렇지 않으면 other를 호출하고 해당 호출의 결과를 반환합니다.

14

T orElseThrow(Supplier exceptionSupplier)

포함된 값이 있으면 반환하고, 그렇지 않으면 제공된 공급자가 생성할 예외를 throw합니다.

15

문자열 toString()

디버깅에 적합한 이 Optional의 비어 있지 않은 문자열 표현을 반환합니다.

이 클래스는 다음 클래스에서 메소드를 상속합니다 -

선택적 예시

예를 들어 C:\> JAVA.

에서 원하는 편집기를 사용하여 다음 Java 프로그램을 만듭니다.

Java8Tester.java

라이브 데모
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;
   }
}

결과 확인

javac를 사용하여 클래스 컴파일 다음과 같이 컴파일러 -

C:\JAVA>javac Java8Tester.java

이제 다음과 같이 Java8Tester를 실행하십시오 -

C:\JAVA>java Java8Tester

다음 출력을 생성해야 합니다 -

First parameter is present: false
Second parameter is present: true
10

자바 8 - Nashorn 자바스크립트

Java 8에서는 기존 Rhino를 대체하기 위해 훨씬 개선된 자바스크립트 엔진인 Nashorn이 도입되었습니다. Nashorn은 메모리에 있는 코드를 직접 컴파일하고 바이트코드를 JVM에 전달하므로 2~10배 더 나은 성능을 제공합니다. Nashorn은 성능을 개선하기 위해 Java 7에 도입된 동적 호출 기능을 사용합니다.

jjs

Nashorn 엔진의 경우 JAVA 8에는 새로운 명령줄 도구인 jjs,가 도입되었습니다. 콘솔에서 자바스크립트 코드를 실행합니다.

js 파일 해석

sample.js 파일 생성 및 저장 c:\> JAVA 폴더에 있습니다.

샘플.js

print('Hello World!');

콘솔을 열고 다음 명령을 사용하십시오.

C:\JAVA>jjs sample.js

다음과 같은 출력이 생성됩니다.

Hello World!

대화식 모드의 jjs

콘솔을 열고 다음 명령을 사용하십시오.

C:\JAVA>jjs
jjs> print("Hello, World!")
Hello, World!
jjs> quit()
>>

인수 전달

콘솔을 열고 다음 명령을 사용하십시오.

C:\JAVA> jjs -- a b c
jjs> print('letters: ' +arguments.join(", "))
letters: a, b, c
jjs>

자바에서 자바스크립트 호출

ScriptEngineManager를 사용하면 Java에서 JavaScript 코드를 호출하고 해석할 수 있습니다.

예시

예를 들어 C:\> JAVA.

에서 원하는 편집기를 사용하여 다음 Java 프로그램을 만듭니다.

Java8Tester.java

라이브 데모
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());
   }
}

결과 확인

javac를 사용하여 클래스 컴파일 다음과 같이 컴파일러 -

C:\JAVA>javac Java8Tester.java

이제 다음과 같이 Java8Tester를 실행하십시오 -

C:\JAVA>java Java8Tester

다음 결과를 생성해야 합니다 -

Mahesh
12

자바스크립트에서 자바 호출

다음 예제에서는 자바 스크립트에서 자바 클래스를 가져오고 사용하는 방법을 설명합니다.

sample.js 생성 및 저장 c:\> JAVA 폴더에 있습니다.

샘플.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);

콘솔을 열고 다음 명령을 사용하십시오.

C:\JAVA>jjs sample.js

다음 출력을 생성해야 합니다 -

78952000000000000003.20

자바 8 - 새로운 날짜/시간 API

Java 8에서는 이전 날짜-시간 API의 다음과 같은 단점을 보완하기 위해 새로운 날짜-시간 API가 도입되었습니다.

Java 8은 java.time 패키지 아래에 새로운 날짜-시간 API를 도입했습니다. 다음은 java.time 패키지에 도입된 몇 가지 중요한 클래스입니다.

로컬 날짜-시간 API

LocalDate/LocalTime 및 LocalDateTime 클래스는 시간대가 필요하지 않은 개발을 단순화합니다. 그들의 행동을 보자.

예를 들어 C:\> JAVA.

에서 원하는 편집기를 사용하여 다음 Java 프로그램을 만듭니다.

Java8Tester.java

라이브 데모
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);
   }
}

결과 확인

javac를 사용하여 클래스 컴파일 다음과 같이 컴파일러 -

C:\JAVA>javac Java8Tester.java

이제 다음과 같이 Java8Tester를 실행하십시오 -

C:\JAVA>java Java8Tester

다음 출력을 생성해야 합니다 -

Current DateTime: 2014-12-09T11:00:45.457
date1: 2014-12-09
Month: DECEMBERday: 9seconds: 45
date2: 2012-12-10T11:00:45.457
date3: 2014-12-12
date4: 22:15
date5: 20:15:30

존 날짜-시간 API

시간대를 고려할 때 Zoned date-time API를 사용합니다. 그들의 행동을 살펴봅시다.

예를 들어 C:\> JAVA.

에서 원하는 편집기를 사용하여 다음 Java 프로그램을 만듭니다.

Java8Tester.java

라이브 데모
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);
   }
}

결과 확인

javac를 사용하여 클래스 컴파일 다음과 같이 컴파일러 -

C:\JAVA>javac Java8Tester.java

이제 다음과 같이 Java8Tester를 실행하십시오 -

C:\JAVA>java Java8Tester

다음 출력을 생성해야 합니다 -

date1: 2007-12-03T10:15:30+05:00[Asia/Karachi]
ZoneId: Europe/Paris
CurrentZone: Etc/UTC

크로노 유닛 열거

java.time.temporal.ChronoUnit enum은 이전 API에서 일, 월 등을 나타내는 정수 값을 대체하기 위해 Java 8에 추가되었습니다. 작동 방식을 살펴보겠습니다.

예를 들어 C:\> JAVA.

에서 원하는 편집기를 사용하여 다음 Java 프로그램을 만듭니다.

Java8Tester.java

라이브 데모
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);
   }
}

결과 확인

javac를 사용하여 클래스 컴파일 다음과 같이 컴파일러 -

C:\JAVA>javac Java8Tester.java

이제 다음과 같이 Java8Tester를 실행하십시오 -

C:\JAVA>java Java8Tester

다음 결과를 생성해야 합니다 -

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

기간 및 기간

Java 8에서는 시차를 처리하기 위해 두 개의 특수 클래스가 도입되었습니다.

그들의 행동을 살펴봅시다.

예를 들어 C:\> JAVA.

에서 원하는 편집기를 사용하여 다음 Java 프로그램을 만듭니다.

Java8Tester.java

라이브 데모
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);
   }
}

결과 확인

javac를 사용하여 클래스 컴파일 다음과 같이 컴파일러 -

C:\JAVA>javac Java8Tester.java

이제 다음과 같이 Java8Tester를 실행하십시오 -

C:\JAVA>java Java8Tester

다음 출력을 생성해야 합니다 -

Current date: 2014-12-10
Next month: 2015-01-10
Period: P-1M
Duration: PT2H

시간 조절자

TemporalAdjuster는 날짜 수학을 수행하는 데 사용됩니다. 예를 들어 "매월 두 번째 토요일" 또는 "다음 화요일"을 가져옵니다. 그들의 행동을 살펴봅시다.

예를 들어 C:\> JAVA.

에서 원하는 편집기를 사용하여 다음 Java 프로그램을 만듭니다.

Java8Tester.java

라이브 데모
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);
   }
}

결과 확인

javac를 사용하여 클래스 컴파일 다음과 같이 컴파일러 -

C:\JAVA>javac Java8Tester.java

이제 다음과 같이 Java8Tester를 실행하십시오 -

C:\JAVA>java Java8Tester

다음 결과를 생성해야 합니다 -

Current date: 2014-12-10
Next Tuesday on : 2014-12-16
Second Saturday on : 2014-12-13

이전 호환성

toInstant() 메서드가 원본 Date 및 Calendar 객체에 추가되어 이를 새로운 Date-Time API로 변환하는 데 사용할 수 있습니다. ofInstant(Insant,ZoneId) 메서드를 사용하여 LocalDateTime 또는 ZonedDateTime 개체를 가져옵니다. 그들의 행동을 살펴봅시다.

예를 들어 C:\> JAVA.

에서 원하는 편집기를 사용하여 다음 Java 프로그램을 만듭니다.

Java8Tester.java

라이브 데모
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);
   }
}

결과 확인

javac를 사용하여 클래스 컴파일 다음과 같이 컴파일러 -

C:\JAVA>javac Java8Tester.java

이제 다음과 같이 Java8Tester를 실행하십시오 -

C:\JAVA>java Java8Tester

다음 출력을 생성해야 합니다 -

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]

자바 8 - Base64

Java 8과 함께 Base64는 마침내 그 기한을 맞이했습니다. Java 8에는 이제 Base64 인코딩을 위한 인코더와 디코더가 내장되어 있습니다. Java 8에서는 세 가지 유형의 Base64 인코딩을 사용할 수 있습니다.

중첩 클래스

시니어 번호 중첩 클래스 및 설명
1

static class Base64.Decoder

This class implements a decoder for decoding byte data using the Base64 encoding scheme as specified in RFC 4648 and RFC 2045.

2

static class Base64.Encoder

This class implements an encoder for encoding byte data using the Base64 encoding scheme as specified in RFC 4648 and RFC 2045.

Methods

Sr.No. Method Name &Description
1

static Base64.Decoder getDecoder()

Returns a Base64.Decoder that decodes using the Basic type base64 encoding scheme.

2

static Base64.Encoder getEncoder()

Returns a Base64.Encoder that encodes using the Basic type base64 encoding scheme.

3

static Base64.Decoder getMimeDecoder()

Returns a Base64.Decoder that decodes using the MIME type base64 decoding scheme.

4

static Base64.Encoder getMimeEncoder()

Returns a Base64.Encoder that encodes using the MIME type base64 encoding scheme.

5

static Base64.Encoder getMimeEncoder(int lineLength, byte[] lineSeparator)

Returns a Base64.Encoder that encodes using the MIME type base64 encoding scheme with specified line length and line separators.

6

static Base64.Decoder getUrlDecoder()

Returns a Base64.Decoder that decodes using the URL and Filename safe type base64 encoding scheme.

7

static Base64.Encoder getUrlEncoder()

Returns a Base64.Encoder that encodes using the URL and Filename safe type base64 encoding scheme.

Methods Inherited

This class inherits methods from the following class −

Base64 Example

Create the following Java program using any editor of your choice in say C:/> JAVA.

Java8Tester.java

Live Demo
import java.util.Base64;
import java.util.UUID;
import java.io.UnsupportedEncodingException;

public class HelloWorld {

   public static void main(String args[]) {

      try {
		
         // Encode using basic encoder
         String base64encodedString = Base64.getEncoder().encodeToString(
            "TutorialsPoint?java8".getBytes("utf-8"));
         System.out.println("Base64 Encoded String (Basic) :" + base64encodedString);
		
         // Decode
         byte[] base64decodedBytes = Base64.getDecoder().decode(base64encodedString);
		
         System.out.println("Original String: " + new String(base64decodedBytes, "utf-8"));
         base64encodedString = Base64.getUrlEncoder().encodeToString(
            "TutorialsPoint?java8".getBytes("utf-8"));
         System.out.println("Base64 Encoded String (URL) :" + base64encodedString);
		
         StringBuilder stringBuilder = new StringBuilder();
		
         for (int i = 0; i < 10; ++i) {
            stringBuilder.append(UUID.randomUUID().toString());
         }
		
         byte[] mimeBytes = stringBuilder.toString().getBytes("utf-8");
         String mimeEncodedString = Base64.getMimeEncoder().encodeToString(mimeBytes);
         System.out.println("Base64 Encoded String (MIME) :" + mimeEncodedString);

      } catch(UnsupportedEncodingException e) {
         System.out.println("Error :" + e.getMessage());
      }
   }
}

Verify the Result

Compile the class using javac compiler as follows −

C:\JAVA>javac Java8Tester.java

Now run the Java8Tester as follows −

C:\JAVA>java Java8Tester

It should produce the following output −

Base64 Encoded String (Basic) :VHV0b3JpYWxzUG9pbnQ/amF2YTg=
Original String: TutorialsPoint?java8
Base64 Encoded String (URL) :VHV0b3JpYWxzUG9pbnQ_amF2YTg=
Base64 Encoded String (MIME) :YmU3NWY2ODktNGM5YS00ODlmLWI2MTUtZTVkOTk2YzQ1Njk1Y2EwZTg2OTEtMmRiZC00YTQ1LWJl
NTctMTI1MWUwMTk0ZWQyNDE0NDAwYjgtYTYxOS00NDY5LTllYTctNjc1YzE3YWJhZTk1MTQ2MDQz
NDItOTAyOC00ZWI0LThlOTYtZWU5YzcwNWQyYzVhMTQxMWRjYTMtY2MwNi00MzU0LTg0MTgtNGQ1
MDkwYjdiMzg2ZTY0OWU5MmUtZmNkYS00YWEwLTg0MjQtYThiOTQxNDQ2YzhhNTVhYWExZjItNjU2
Mi00YmM4LTk2ZGYtMDE4YmY5ZDZhMjkwMzM3MWUzNDMtMmQ3MS00MDczLWI0Y2UtMTQxODE0MGU5
YjdmYTVlODUxYzItN2NmOS00N2UyLWIyODQtMThlMWVkYTY4M2Q1YjE3YTMyYmItZjllMS00MTFk
LWJiM2UtM2JhYzUxYzI5OWI4

java

  1. 자바 벡터
  2. 밀링 – 빠른 안내서
  3. PM 개발 및 실행에 대한 퀵 가이드
  4. 공급망 중단 보험에 대한 빠른 안내서
  5. 사각 파이프 벤딩 머신에 대한 빠른 가이드
  6. 냉간 프레스 기계에 대한 빠른 안내서
  7. 유성 기어박스에 대한 빠른 가이드
  8. 제트 밀 드릴에 대한 빠른 가이드
  9. 서보 프레스 기계에 대한 빠른 가이드
  10. 공압 실린더에 대한 빠른 안내서