Java世界中引入的一个重大新闻与版本周期有关,我们每六个月发布一次,每三年发布一次长期支持版本。当前,LTS版本是Java 11,许多公司都在从Java 11开始使用它。首先,这一运动意义重大,因为新框架将不支持Java 8,并且将考虑Java 11作为下一个LTS将于2021年9月发布的Java 11的最低标准。基本的API在Java 8和Java 11之间发生。
该 功能类 从Java 8开始,将作为基础的重要一点是java.util.function包中的新接口,在此概述中,我们将看到隐蔽的四个接口:
java.util.function
Function: 表示一个接受一个参数并产生结果的函数:
import java.util.function.Function; public class FunctionApp { public static void main(String[] args) { Function<String, Integer> toNumber = Integer::parseInt; System.out.println("To number: " + toNumber.apply("234")); Function<String, String> upperCase = String::toUpperCase; Function<String, String> trim = String::trim; Function<String, String> searchEngine = upperCase.andThen(trim); System.out.println("Search result: " + searchEngine.apply(" test one two ")); } }
Predicate: 表示一个参数的谓词 (boolean-valued function) .
import java.util.function.Predicate; public class PredicateApp { public static void main(String[] args) { Predicate<String> startWithA = s -> s.startsWith("A"); Predicate<String> startWithB = s -> s.startsWith("B"); System.out.println(startWithA.and(startWithB).test("Animal")); } }
Supplier: 代表结果的提供者。
import java.util.Optional; import java.util.function.Supplier; public class SupplierApp { public static void main(String[] args) { Supplier<String> cache = () -> "From Database"; Optional<String> query = Optional.empty(); System.out.println(query.orElseGet(cache)); } }
Consumer: 表示一个接受单个输入参数且不返回结果的操作。
import java.util.function.Consumer; public class ConsumerApp { public static void main(String[] args) { Consumer<String> log = s -> System.out.println("The log " +s); Consumer<String> logB = s -> System.out.println("The logB " +s); log.andThen(logB).accept("The value A"); } }
在这些接口上,我们将看到一些改进,例如在Collections实现中:
public class ListApp { public static void main(String[] args) { List<String> fruits = new ArrayList<>(List.of("Bananas", "Melon", "Watermelon")); fruits.forEach(System.out::println); fruits.removeIf("Bananas"::equals); fruits.sort(Comparator.naturalOrder()); System.out.println("After sort: "); fruits.forEach(System.out::println); } } public class SetApp { public static void main(String[] args) { Set<String> fruits = new HashSet<>(List.of("Bananas", "Melon", "Watermelon")); fruits.forEach(System.out::println); fruits.removeIf("Bananas"::equals); System.out.println("After sort: "); fruits.forEach(System.out::println); } } public class MapApp { public static void main(String[] args) { Map<String, String> medias = new HashMap<>(); medias.put("facebook", "otaviojava"); medias.put("twitter", "otaviojava"); medias.put("linkedin", "otaviojava"); System.out.println("The medias values " + medias); medias.forEach((k, v) -> System.out.println("the key: " + k + " the value " + v)); medias.compute("twitter", (k, v) -> k + '-' + v); System.out.println("The medias values " + medias); medias.computeIfAbsent("social", k -> "no media found: " + k); medias.computeIfPresent("social", (k, v) -> k + " " + v); System.out.println("The medias values " + medias); medias.replaceAll((k, v) -> v.toUpperCase(Locale.ENGLISH)); System.out.println("The medias values " + medias); } }
此外,还有一些新的方法工厂可以简化创建集合接口的过程:
import java.util.List; import java.util.Map; import java.util.Set; public class MethodFactory { public static void main(String[] args) { List<String> fruits = List.of("banana", "apples"); Set<String> animals = Set.of("Lion", "Monkey"); Map<String, String> contacts = Map.of("email", "[email protected]", "twitter", "otaviojava"); } }
流是支持顺序和并行聚合操作的一系列元素。我们可以考虑瀑布或河流。该API健壮且简洁,可以操纵集合,例如:
public class StreamApp { public static void main(String[] args) { List<String> fruits = List.of("Banana", "Melon", "Watermelon"); fruits.stream().sorted().collect(Collectors.collectingAndThen(Collectors.toList(), Collections::unmodifiableList)); fruits.stream().sorted().collect(Collectors.toUnmodifiableList()); Map<Boolean, List<String>> startWithB = fruits.stream().collect(Collectors.partitioningBy(f -> f.startsWith("B"))); System.out.println("Start with B " + startWithB); Map<String, List<String>> initials = fruits.stream().collect(Collectors.groupingBy(s -> s.substring(0))); System.out.println("Initials: " + initials); } }
public class StreamReduceApp { 3 4 public static void main(String[] args) { List<BigDecimal> values = List.of(BigDecimal.ONE, BigDecimal.TEN); Optional<BigDecimal> total = values.stream().reduce(BigDecimal::add); System.out.println(total); } }
当Java 8发布时, 新的Date and Time API具有新的类型,不可变的类,实用的新闻方法,最后是 Enums 到星期和几个月的日期,而不是数字。
import java.time.DayOfWeek; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.Month; import java.time.Year; import java.time.YearMonth; import java.util.Arrays; public class DateApp { public static void main(String[] args) { System.out.println("LocalDateTime: " + LocalDateTime.now()); System.out.println("Localdate: " + LocalDate.now()); System.out.println("LocalDateTime: " + LocalDateTime.now()); System.out.println("YearMonth: " + YearMonth.now()); System.out.println("Days of weeks: " + Arrays.toString(DayOfWeek.values())); System.out.println("Months: " + Arrays.toString(Month.values())); } }
作为当前的LTS,Java 11具有多种功能,使开发人员的日常工作更加轻松。这篇文章只是概述,很快就开始使用Java 11,但错过了一些Java8。每个新版本都有很多关于此功能的参考。
原文链接:https://codingdict.com/