forEach( )用法

我们先看一个forEach()方法遍历List集合的例子:

        //使用com.google.guava包创建集合
		List<String> list =Lists.newArrayList("a","b","c","d");

        //遍历1  其中anyThing可以用其它字符替换

        list.forEach((anyThing)->System.out.println(anyThing));

        //遍历2

        list.forEach(any->System.out.println(any));

        //匹配输出 : "b"

        list.forEach(item->{

            if("b".equals(item)){

                System.out.println(item);

            }

        });

我们看一下forEach()的实现:

public interface Iterable<T> {

    Iterator<T> iterator();

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

        Objects.requireNonNull(action);

        for (T t : this) {

            action.accept(t);

        }

    }


    default Spliterator<T> spliterator() {

        return Spliterators.spliteratorUnknownSize(iterator(), 0);

    }

}

可以看到:forEach()方法是Iterable接口中的一个方法。Java容器中,所有的Collection子类(List、Set)会实现Iteratable接口以实现foreach功能。forEach()方法里面有个Consumer类型,它是Java8新增的一个消费型函数式接口,其中的accept(T t)方法代表了接受一个输入参数并且无返回的操作。

@FunctionalInterface

public interface Consumer<T> {

    /* 接收单个参数,返回为空 */

    void accept(T t);

    default Consumer<T> andThen(Consumer<? super T> after) {

        Objects.requireNonNull(after);

        return (T t) -> { accept(t); after.accept(t); };

    }

}

我们可以这样使用Consumer接口

public class Test {

    //自定义一个test方法

    public static void test(int value, Consumer<Integer> consumer) {

        consumer.accept(value);

    }

    public static void main(String[] args) {

        //这里,Consumer消费型函数式接口代表了接受一个输入参数并且无返回的操作

        //(x) -> System.out.println(x * 2)代表接受一个输入参数x,这里 x=3

        //可以使用lambda表达式,输出结果为6

        test(3, (x) -> System.out.println(x * 2));

    }

forEach()方法同样可以遍历存储其它对象的List集合:

        List<User> list =Lists.newArrayList(new User("aa",10),

                                                      new User("bb",11),

                                                      new User("cc",12));


        //遍历  其中any可以用其它字符替换

       // list.forEach(any->System.out.println(any));

        //匹配输出,匹配项可以为list集合元素的属性(成员变量)

        list.forEach(any->{

            if(new User("bb",11).equals(any)){

                System.out.println(any);

            }

        });

    }

map集合不属于Collection,它有自己的foreach()方法:

    default void forEach(BiConsumer<? super K, ? super V> action) {

        Objects.requireNonNull(action);

        for (Map.Entry<K, V> entry : entrySet()) {

            K k;

            V v;

            try {

                k = entry.getKey();

                v = entry.getValue();

            } catch(IllegalStateException ise) {

                // this usually means the entry is no longer in the map.

                throw new ConcurrentModificationException(ise);

            }

            action.accept(k, v);

        }

    }

使用:

        Map<String,User> map =new HashMap<>();

        map.put("1",new User("aa",10));

        map.put("2",new User("bb",11));

        map.put("3",new User("cc",12));
        //匹配输出,匹配项可以为list集合元素的属性(成员变量)

        map.forEach((t,v)->System.out.println("id : " + t + " User : " + v));
引用介绍了jQuery each和js forEach用法,并通过实例对比分析了它们的具体使用方法和相关操作注意事项。引用提到在C#语言中,foreach语句用于遍历数组中的元素,并给出了具体的语法形式。而引用指出每一次循环时,从集合中取出一个新的元素值,并将其放到只读变量中,如果括号中的整个表达式返回值为true,则可以执行foreach块中的语句。 根据这些引用内容,forEach用法是一种循环语句,常用于遍历数组或集合中的元素。在JavaScript中,可以使用forEach方法来遍历数组,语法形式如下: arr.forEach(function(element) { // 在这里执行对每个元素的操作 }); 而在C#中,可以使用foreach语句来遍历数组或集合,语法形式如下: foreach (数据类型 变量名 in 数组名) { // 在这里执行对每个元素的操作 } 需要注意的是,在使用forEachforeach时,可以在循环体中执行对每个元素的操作。同时,可以使用break语句来提前结束循环,或使用continue语句来跳过当前循环迭代,进入下一次迭代。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [jQuery each和js forEach用法比较](https://download.csdn.net/download/weixin_38709511/12945810)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [c#foreach循环用法详解](https://blog.csdn.net/opencv220/article/details/107403413)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值