Java 8 中,String類只添加了一個方法:join,做用是按照指定分隔符將多個字符串組合起來,能夠認爲它是split方法的反操做。java
String joined = String.join("/", "usr", "local", "bin"); System.out.println(joined); String[] ids = {"1", "3", "6"}; System.out.println(String.join(",", ids)); // 輸出結果是 // usr/local/bin // 1,3,6
集合類最大的改變就是支持流操做。另外,還添加了其它一些有用的方法。sql
類/接口 | 新方法 |
---|---|
Iterable | forEach |
Collection | removeIf |
List | replaceAll, sort |
Map | forEach, replace, replaceAll, remove(key, value), putIfAbsent, compute, computeIfAbsent, computeIfPresent, merge |
Iterator | forEachRemaining |
其中大部分方法都能直接看出用途,只有compute*、merge、forEachRemaining比較陌生,簡單介紹一下這幾個方法:數組
經過key和一個函數計算出新的值安全
Map<String, String> map = new HashMap<>(); map.put("key", "value"); System.out.println(map.compute("key", String::concat)); // 輸出 keyvalue
合併value,若是key不存在,使用給定的值做爲value。與compute不一樣的是merge不處理key, eg:計數,若是存在key,+1;若是不存在,賦值爲1ide
Map<String, Integer> map = new HashMap<>(); map.merge("key", 1, (i1, i2) -> i1 + i2); System.out.println(map.get("key")); // 輸出 1 map.merge("key", 1, (i1, i2) -> i1 + i2); System.out.println(map.get("key")); // 輸出 2
可以將Iterator中迭代剩餘的元素傳遞給一個函數函數
List<String> list = Arrays.asList("a", "b", "c", "d", "e"); Iterator<String> it = list.iterator(); while (it.hasNext()) { if ("c".equals(it.next())){ break; } } it.forEachRemaining(s -> System.out.print(s + " ")); // 輸出 d e
Comparator接口新增comparing方法,該方法接收一個函數,函數的返回值就是用於比較的對象。同時,支持多級比較。this
// 先按照name進行排序,若是name同樣,按照age排序 public static void main(String[] args) { Person[] ps = {new Person("a", 20), new Person("b", 20), new Person("a", 18)}; Arrays.sort(ps, Comparator.comparing(Person::getName).thenComparing(Person::getAge)); System.out.println(Arrays.asList(ps)); // 輸出 [Person{name='a', age=18}, Person{name='a', age=20}, Person{name='b', age=20}] } private static class Person{ private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } // 省略get set @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + '}'; } }
ps:Comparator接口還有其它的一些使用方式,就不一一列舉了。編碼
Base64 編碼是一種將非ASCII字符轉爲ASCII字符的編碼方式,主要用於轉換字節數組成爲可打印的字符序列。在以前的版本,JDK 中提供了 sun.misc.BASE64Encoder 這個類,可是sun.misc 這個包是SUN公司的實現,並不是J2SE規範的實現,並且BASE64Encoder 沒有任何文檔說明,因此咱們通常會本身實現或使用第三方實現。終於,Java 8 提供了一個標準的編碼器和解碼器。code
/* * 三種編碼器: * 一、常規Base64編碼器,沒有換行 * 二、電子郵件是用的MIME標準編碼器,每76個字符使用一個"\r\n"換行符 * 三、對URL和文件名安全的編碼器,使用「-」和「_」替換「+」和「/」 */ Base64.getEncoder(); Base64.getMimeEncoder(); Base64.getUrlEncoder();
Objects類新增了兩個靜態的斷言(pridicate)方法,isNull 和 nonNull,這兩個方法在使用流的時候很是實用。例如對象
stream.anyMatch(Objects::isNull); // 檢查一個流是否含有null值 stream.filter(Objects::nonNull); // 獲取全部非null的對象
在Java 8 中,JDBC 已經升級到了4.2版本,該版本爲 java.sql 包中的 Date、Time 和 Timestamp 類提供了一些方法,能夠與 java.time 包中對應的 LocalDate、LocalTime 和 LocalDateTime 類互相進行轉換。
Date date = new java.sql.Date(System.currentTimeMillis()); Instant instant = date.toInstant(); LocalDate localDate = date.toLocalDate();