www.zhblog.net

Java 8 forEach 方法

1.Java 8 forEach 方法

下面代码段显示了Iterable接口中forEach方法。它是除Map外所用集合类都能使用的工具方法。

default void forEach(Consumer<? super T> action) {

    Objects.requireNonNull(action);

    for (T t : this) {

        action.accept(t);

    }

}


这个方法会为每一个迭代元素执行action操作,直到结束或出现异常。

actionConsumer接口的实例,接收一个参数,无返回值。


创建自定义的action。这里的Object类型应该替换成集合或流元素的类型。

Consumer<Object> action = new Consumer<Object>()

{

    @Override

    public void accept(Object t) 

    {

        //perform action

    }

};


2. Java 8 stream 的 forEach 实例

下面程序会遍历流的所有元素,并为每个元素执行action操作。这个例子会打印所有偶数。

// stream for each

ArrayList<Integer> numberList = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));

Consumer<Integer> action = System.out::println;

numberList.stream().filter(n -> n % 2 == 0).forEach(action);


程序输出

2

4


3. Java 8 List 的 forEach 实例

程序会遍历流的所有元素,并为每个元素执行action操作。这个例子只是简单的将元素在控制台打印出来。

// list for each

ArrayList<Integer> numberList = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));

Consumer<Integer> action = System.out::println;

numberList.forEach(action);


程序输出

1

2

3

4

5


4. Java 8 Map 的 forEach 实例

Map中我们可以将map的entrykeysvalues当作元素来遍历,并且执行action

// map for each

HashMap<String, Integer> map = new HashMap<>();

map.put("A", 1);

map.put("B", 2);

map.put("C", 3);



// 1.map entries

Consumer<Map.Entry<String, Integer>> action = System.out::println;

map.entrySet().forEach(action);



// 2.map keys

Consumer<String> actionOnKeys = System.out::println;

map.keySet().forEach(actionOnKeys);



// 3.map values

Consumer<Integer> actionOnValues = System.out::println;

map.values().forEach(actionOnValues);


程序输出

A=1

B=2

C=3

A

B

C

1

2

3


5. 创建自定义的 action

我们可以自定义自己的action方法,为集合中元素执行我们自己的逻辑。

// create custom action

ArrayList<Integer> numberList = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));

Consumer<Integer> action = new Consumer<Integer>() {

	@Override

	public void accept(Integer integer) {

		integer = integer * 2;

		System.out.println(integer);

	}

};

numberList.forEach(action);


程序输出

2

4

6

8

10


使用lambda表达式可以简化action的创建

// create custom action with lambda

HashMap<String, Integer> map = new HashMap<>();

map.put("A", 1);

map.put("B", 2);

map.put("C", 3);

Consumer<Map.Entry<String, Integer>> action = entry -> {

	System.out.println("Key is :" + entry.getKey());

	System.out.println("Value is :" + entry.getValue());

};

map.entrySet().forEach(action);


程序输出

Key is :A

Value is :1

Key is :B

Value is :2

Key is :C

Value is :3

 

 

展开阅读全文

评论

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 心情