Arrays.stream(xxx).forEach,一直使用Java8 但是新特性卻是沒怎么用過,借此項目機會,用到的都記錄下來。
案例1:
List<String> updList = new ArrayList<>(); List<String> delList = new ArrayList<>(); for (int i = 0; i < 1; i++) { String uu = "test1-test2-test3-test4"; updateList.add(uu); //updateList中存儲 test1-test2-test3-test4 } for (String tmp : updateList) { Arrays.stream(tmp.split("-")).forEach(str -> { delList.add("TEST_" + str); //delList中存儲: TEST_test1 TEST_test2 ... }); } for (String s : delList) { System.out.println(s); } //輸出結果:TEST_test1 TEST_test2 TEST_test3 TEST_test4
案例2:
import java.util.stream.Stream; /* * Stream流中的常用方法_forEach * void forEach(Consumer<? super T>) action; * 該方法接受一個Consumenr接口函數,會將每一個流元素交給函數進行處理 * Consumer接口是一個消費型的函數式接口,可以傳遞Lambda表達式,消費數據 * 簡單記: * forEach方法,用來遍歷流中的數據 * 是一個終結方法,遍歷之后就不能繼續調用Stream流中的其他方法 */ public class demoforeach { public static void main(String[] args) { //獲取一個Stream流 Stream<String> stream = Stream.of("a", "b"); //使用Stream流中的方法forEach對Stream流中的數據進行遍歷 // //stream.forEach((String name)->{ // System.out.println(name); //}); stream.forEach(name -> System.out.println(name)); } }
案例3:按格式輸出一個object對象的屬性值
public static void printObject(Object ob) { Field[] fields = ob.getClass().getDeclaredFields();//獲取所有屬性 String s = ob.getClass().getName(); System.out.print( s.substring( s.lastIndexOf(".")+1 )+ " {"); Arrays.stream(fields).forEach(field -> { //獲取是否可訪問 boolean flag = field.isAccessible(); try { //設置該屬性總是可訪問 field.setAccessible(true); System.out.print( field.getName() + "=" + field.get(ob) + ", "); } catch (IllegalAccessException e) { e.printStackTrace(); } //還原可訪問權限 field.setAccessible(flag); }); System.out.println("}"); }