Page tree

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

1> String class 기능 추가1> String class 기능 추가

-  인덴트 자동 인덴트 (들여쓰기)
String text = "Hello Baeldung!\nThis is Java 12 article.";
text = text.indent(4);
System.out.println(text);

. . . .Hello Baeldung!
. . . .This is Java 12 article.

text = text.indent(-10); // 초과되면 가능한 부분까지만 적용
System.out.println(text); 

Hello Baeldung!
This is Java 12 article.

- 트랜스폼 / 싱글(단일) 아규먼트임에도 변현 내용이 직접 반영됨.

String text = "Baeldung";
    String transformed = text.transform(value ->
      new StringBuilder(value).reverse().toString()
    );

gnudleaB

2> nio.file.Files utility class: 불일치 mismatch 위치 찾기 메소드

Path filePath1 = Files.createTempFile("file1", ".txt");
Path filePath2 = Files.createTempFile("file2", ".txt");
Files.writeString(filePath1, "Java 12 Article");
Files.writeString(filePath2, "Java 12 Article");

long mismatch = Files.mismatch(filePath1, filePath2);
assertEquals(-1, mismatch);


3> Teeing

A new teeing collector was introduced in Java 12 as an addition to the Collectors class:
Collector<T
Collector<T?, R> teeing R> teeing(Collector<? super T super T?, R1> downstream1 R1> downstream1,
  Collector<? super T super T?, R2> downstream2 R2> downstream2, BiFunction<? super R1 super R1? super R2R> merger super R2, R> merger)
It is a composite of two downstream collectors. Every element is processed by both downstream collectors. Then their results are passed to the merge function and transformed into the final result Then their results are passed to the merge function and transformed into the final result.

The example usage of teeing collector is counting an average from a set of numbers. The first collector parameter will sum up the values, and the second one will give us the count of all numbers. The merge function will take these results and count the average:

@Test
public void givenSetOfNumberspublic void givenSetOfNumbers_thenCalculateAverage() {
    double mean = Stream    double mean = Stream.of(1, 2 2, 3 3, 4 4, 5 5)
      .collect(Collectors.teeing(Collectors.summingDouble(i -> i> i), 
        Collectors        Collectors.counting(), (sum, count) -> sum > sum / count));
    assertEquals    assertEquals(3.0, mean mean);
}
-------------------
4> 콤팩트 숫자 포맷팅
Compact Number Formatting
Java 12 comes with a new number formatter – the CompactNumberFormat. It


4> 콤팩트 숫자 포맷팅

Compact Number Formatting
Java 12 comes with a new number formatter – the CompactNumberFormat. It's designed to represent a number in a shorter form, based on the patterns provided by a given locale.

We can get its instance via the getCompactNumberInstance method in NumberFormat class:

public static NumberFormat getCompactNumberInstance(Locale locale, NumberFormat.Style formatStyle)
As mentioned before, the locale parameter is responsible for providing proper format patterns. The format style can be either SHORT or LONG. For a better understanding of the format styles, let's consider number 1000 in the US localeThe SHORT style would format it as “10K”, and the LONG one would do it as “10 thousand”.
Now let's take a look at an example that'll take the numbers of likes under this article and compact it with two different styles:
@Test
public void givenNumbers consider number 1000 in the US locale. The SHORT style would format it as “10K”, and the LONG one would do it as “10 thousand”.

Now let's take a look at an example that'll take the numbers of likes under this article and compact it with two different styles:

@Test
public void givenNumber_thenCompactValues() {
    NumberFormat likesShort     NumberFormat likesShort 
      NumberFormat      NumberFormat.getCompactNumberInstance(new Localenew Locale("en""US"), NumberFormat NumberFormat.Style.SHORT);
    likesShort    likesShort.setMaximumFractionDigits(2);
    assertEquals    assertEquals("2.59K", likesShort likesShort.format(2592));
    NumberFormat likesLong 
    NumberFormat likesLong 
      NumberFormat      NumberFormat.getCompactNumberInstance(new Localenew Locale("en""US"), NumberFormat NumberFormat.Style.LONG);
    likesLong    likesLong.setMaximumFractionDigits(2);
    assertEquals    assertEquals("2.59 thousand", likesShort likesShort.format(2592));
5> 새로운 스위치 표현식


5> 새로운 스위치 표현식

    typeOfDay = switch  switch (dayOfWeek) {
        case MONDAY        case MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY -> "Working Day";
        case SATURDAY        case SATURDAY, SUNDAY -> "Day Off";
    };

    -- using brace.
    
    case MONDAY    case MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY -{
        // more logic
        System        System.out.println("Working Day")
    }
6> 자동 형변환 주입
Another preview feature introduced in Java 12 is pattern matching for instanceof.
In previous Java versions, when usingfor exampleif statements together with instanceof, we would have to explicitly typecast the object to access its features:
Object obj 



6> 자동 형변환 주입

Another preview feature introduced in Java 12 is pattern matching for instanceof.

In previous Java versions, when using, for example, if statements together with instanceof, we would have to explicitly typecast the object to access its features:

Object obj "Hello World!";
if (obj instanceof Stringif (obj instanceof String) {
    String s     String s = (String) obj;
    int length = s    int length = s.length();
}
With Java 12, we can declare the new typecasted variable directly in the statementWith Java 12, we can declare the new typecasted variable directly in the statement:
if (obj instanceof String s
if (obj instanceof String s) {
    int length = s    int length = s.length();
}
The compiler will automatically inject the typecasted String s variable for usThe compiler will automatically inject the typecasted String s variable for us.