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("}"); }