Java 12
Java 12 sürümü ile gelen switch, string, NumberFormat, Collectors teeing, Files mismatch özellik ve metotların kullanımı örneklerle yer alıyor.
Switch Expressions (Preview) – JEP 325
Switch ifadesinin kullanımı genişletilmiştir.
public class App {
public static void main(String[] args) {
Month currentMonth = LocalDate.now().getMonth();
switch (currentMonth) {
case JANUARY, FEBRUARY, MARCH ->
System.out.println("İlk çeyrek"); // break gerek yok
case APRIL, MAY, JUNE ->
System.out.println("ikinci çeyrek");
case JULY, AUGUST, SEPTEMBER ->
System.out.println("üçüncü çeyrek");
case OCTOBER, NOVEMBER, DECEMBER ->
System.out.println("son çeyrek");
default ->
System.out.println("bilinmeyen çeyrek");
}
}
}
Switch ifadesi geri değer dönderebilir.
public class App {
public static void main(String[] args) {
String hangiCeyrek = switch (LocalDate.now().getMonth()) {
case JANUARY, FEBRUARY, MARCH ->
"İlk çeyrek";
case APRIL, MAY, JUNE ->
"ikinci çeyrek";
case JULY, AUGUST, SEPTEMBER ->
"üçüncü çeyrek";
case OCTOBER, NOVEMBER, DECEMBER ->
"son çeyrek";
default ->
"bilinmeyen çeyrek";
};
System.out.println(hangiCeyrek);
}
}
String
String sınıfına yeni indent, transform, describeConstable ve resolveConstantDesc metotları eklenmiştir.
indent – String ifadeye girinti verir ve ifadenin sonuna \n ekler.
public class App {
public static void main(String[] args) {
var myName = " Yusuf\nSefa Sezer";
System.out.println(myName);
System.out.print(myName.indent(10));
System.out.print(myName.indent(-2));
}
}
transform – String ifadeye method reference ile lambda metodu uygular.
public class App {
public static void main(String[] args) {
var myNumber = " 100";
System.out.println(myNumber);
System.out.println(myNumber.getClass());
var myInt = myNumber.strip().transform(Integer::parseInt);
System.out.println(myInt);
System.out.println(myInt.getClass());
}
}
String sınıfı java.lang.constant paketinde yer alan Constable, ConstantDesc arayüzlerini uygular.
Metotlar constant pool kullanımı amacıyla dönüş olarak yine kendilerini döner.
Compact Number Formatting support
Sayıysal değerleri biçimlendirmek veya biçimlendirilmiş sayısal değerleri Java veri türlerini çevirmek için NumberFormat sınıfının kullanımı genişletilmiştir.
public class App {
public static void main(String[] args) {
formatForLocale(Locale.US);
formatForLocale(new Locale("TR"));
}
private static void formatForLocale(Locale locale) {
List<Integer> numbers = List.of(1000, 1000000, 1000000000);
System.out.printf("-- SHORT format=%s%n", locale);
numbers.stream().forEach((num) -> {
NumberFormat nf = NumberFormat.getCompactNumberInstance(locale, NumberFormat.Style.SHORT);
String format = nf.format(num);
System.out.println(format);
});
System.out.printf("-- LONG format=%s%n", locale);
numbers.stream().forEach((num) -> {
NumberFormat nf = NumberFormat.getCompactNumberInstance(locale, NumberFormat.Style.LONG);
String format = nf.format(num);
System.out.println(format);
});
}
}
Collectors
Collectors sınıfına teeing metodu eklenmiştir.
Collector<T, ?, R> teeing(Collector<? super T, ?, R1> downstream1,
Collector<? super T, ?, R2> downstream2,
BiFunction<? super R1, ? super R2, R> merger)
Metodun ilk 2 parametresi yapılacak işlemi son parametresi ise yapılacak işlemlerin sonucunu birleştiren lambda ifadesini alır.
public class App {
public static void main(String[] args) {
// toplama
Collector<Integer, ?, Long> toplama = Collectors.summingLong(Integer::valueOf);
// sayma
Collector<Integer, ?, Long> sayma = Collectors.counting();
// toplama, sayma, birleştirme
Collector<Integer, ?, List<Long>> teeing = Collectors.teeing(toplama, sayma, List::of);
List<Long> collect = IntStream
.range(1, 10)
.boxed()
.collect(teeing);
System.out.println(collect);
}
}
Files
İki dosyayı karşılaştırmak için mismatch metodu eklenmiştir.
public class App {
public static void main(String[] args) throws IOException {
Path filePath1 = Files.createTempFile("yusuf", ".txt");
Path filePath2 = Files.createTempFile("sefa", ".txt");
Files.writeString(filePath1, "Yusuf Sezer");
Files.writeString(filePath2, "Yusuf Sezer");
long mismatch = Files.mismatch(filePath1, filePath2);
System.out.println(mismatch);
filePath1.toFile().deleteOnExit();
filePath2.toFile().deleteOnExit();
}
}
Dosya içerikleri aynı ise -1 değilse ilk farklı yerin konumunu döndürür.
Diğer
Java 12 ile birlikte geliştiricilerin işlemleri hızlıca yapması için çeşitli metotlar eklenmiştir.
Ayrıca Java 10 ve 11 sürümde olduğu gibi bulut tabanlı uygulamalarda performansı iyileştirmek için çöp toplayıcı ve bellek yönetimi geliştirmeleri yapılmıştır.
Java Derslerine buradan ulaşabilirsiniz.
Hayırlı günler dilerim.