foreach用法记录
转自:https://blog.csdn.net/qq_43203949/article/details/105713145
1.普通数组forEach用法
对于数组,foreach 循环实际上还是用的普通的 for 循环,怎么说foreach 循环就是for 循环
int[] arr= {1,2,3,4,5}
//forEach写法(效果跟下面同等)
for(int i:arr)
System.out.println("数组元素:"+i);
//普通for循环
for(int i=0;i<arr.length;i++)
System.out.println("数组元素:"+arr[i]);
2.集合类forEach用法
对于集合,foreach 循环实际上是用的 iterator 迭代器迭代,写法也一样。
ArrayList<Integer> arrlist = new ArrayList<Integer>();
arrlist.add(1);
arrlist.add(2);
arrlist.add(3);
//forEach用法
for(Integer a:arrlist)
System.out.println("集合数据:"+a);
//迭代器循环
for(Iterator<Integer> it = arrlist.iterator();it.hasNext();)
System.out.println("集合数据:"+it.next());
3.forEach+lambda
这里调用ArrayList类的forEach方法,然后传入lambda表达式
List<String> items = new ArrayList<>();
items.add("A");
items.add("B");
items.add("C");
//lambd+forEach方法
items.forEach(item->System.out.println("集合数据:"+item));
//forEach方法来自Iterable接口其他类重新
//这里是ArrayList重写forEach方法源码
public void forEach(Consumer<? super E> action) {
Objects.requireNonNull(action);
final int expectedModCount = modCount;
final Object[] es = elementData;
final int size = this.size;
for (int i = 0; modCount == expectedModCount && i < size; i++)
action.accept(elementAt(es, i));
if (modCount != expectedModCount)
throw new ConcurrentModificationException();
}
接口方法描述:
default void forEach(Consumer<? super T> action)对Iterable的每个元素执行给定的操作,直到所有元素都被处理或动作引发异常。 除非实现类另有规定,否则按照迭代的顺序执行操作(如果指定了迭代顺序)。 动作抛出的异常被转发给呼叫者。
实现要求:
默认实现的行为如下:
for (T t : this) action.accept(t);
4.其他调用方法
//System.out::println这个到底是什么东东,请参考下面博客
items.forEach(System.out::println);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示