常规情况下我们一般是用简单for循环或者增强for循环

	    List<String> list = new ArrayList<>();
 		list.add("123");
        //第一种
 		for (int i = 0; i < list.size(); i++) {
			System.out.println(list.get(i));
		}
 		//第二种
 		for (String string : list) {
			System.out.println(string);
		}

使用jdk1.8之后,简单类型封装类可以这样写输出:

//no.1
list.forEach((String str) -> {
    System.out.println(str);
});

//no.2
list.forEach(str -> {
    System.out.println(str);
});

//no.3
list.forEach(str -> System.out.println(str));

//no.4
list.forEach(System.out::println);

//no.5
list.forEach(new MyConsumer());

MyConsumer类如下,主要是接口的实现

class MyConsumer implements Consumer<String>{

    @Override
    public void accept(String str) {
        System.out.println(str);
    }
}

何为简单类型封装类?

  • Integer
  • Short
  • Long
  • Byte
  • Double
  • Float
  • String
  • Boolean
  • ...

如果是复杂类型(自定义类型),则上述方式则不全都能适用了,但可以这样

MongoDatabase database = MongoDBJDBC.getMongoDB();
MongoCollection<Document> collection = database.getCollection("user");
BasicDBObject query = new BasicDBObject();
FindIterable<Document> users = collection.find(query).sort(new BasicDBObject("age", 1));
  1. 第一种,可以进行多步处理操作,第一种与第二种方式的区别,类似于if后面加大括号与不加的区别
users.forEach((Document block) -> {String str = block.getString("key");
System.out.println(str);
System.out.println(block.getObjectId("_id"));});
  1. 第二种,仅简单的处理处理一次
    java
    users.forEach((Document block) -> System.out.println(block.getObjectId("_id")));

* 第三种,实现Consumer接口

```java
class DocumentConsumer implements Consumer<Document>{

	@Override
	public void accept(Document t) {
	System.out.println(t);

	}

}

users.forEach(new DocumentConsumer());

Q.E.D.


寻门而入,破门而出