java 增强for_java-增强for循环示例

package cd.itcast.day1;

import java.util.ArrayList;

/**

* 增强for循环 for..in 关注于数组/集合里面的元素

*

* for(类型 变量名 : 数组/集合){ 变量名... } 增强for循环和普通循环的区别

*

* @author Administrator

*

*/

public class AdvForeach{

public static void main(String[] args) {

String s= null;

OrderItem item1 = new OrderItem(1l, 20d, 10);

OrderItem item2 = new OrderItem(2l, 30d, 10);

//Double total = count(.8, new OrderItem[] { item1, item2, item3 });

//System.out.println(total);

List orderItems = new ArrayList();

orderItems.add(item1);

orderItems.add(item2);

//orderItems.add(item3);

List newOrderItems=filter(30d,orderItems);

System.out.println(newOrderItems);

//total = count(.8, orderItems);

//System.out.println(total);

//

//String ret = StringUtils.join(",", "1", "2", "3");

//System.out.println(ret);

}

/**

* 在数组里面使用for..in 对于数组来说,其实仍然采用的是下标+对象

*

* @param cutoff

* @param items

* @return

*/

private static Double count(Double cutoff, OrderItem... items) {

Double total = 0d;

for (OrderItem item : items) {

total += item.getPrice() * item.getNum();

}

return total * cutoff;

}

/**

* 还能用在集合里面(所有实现了Iterable接口的类都可以使用for..in)

*

* 对于实现了Iterable接口的实现类来说,其实采用的仍然是Iterator的遍历

*

* 当我们理解了for..in对于Iterable的实现原理,有些操作就不能随便来了。

*/

private static Double count(double cutoff, List orderItems) {

Double total = 0d;

for (Object item : orderItems) {

OrderItem temp = (OrderItem) item;

total += temp.getPrice() * temp.getNum();

}

return total * cutoff;

}

/**

* 把低于给定价格的orderItem去掉

* 下面这种使用for..in的方法报错:java.util.ConcurrentModificationException(并发修改错误)

*

* 迭代的原理:

* 如果使用增强for循环,不能在迭代当中使用集合本身的方法来修改集合,只能使用迭代器对应的方法.

* 但是有一个列外,如果集合只有两个元素,操作remove是允许的

*

* @param price

* @param orderItems

* @return

*/

private static List filter(Double price, List orderItems) {

for (Object object : orderItems) {

OrderItem item = (OrderItem) object;

if (item.getPrice() < price) {

orderItems.remove(item);

}

}

//for(Iterator it=orderItems.iterator();it.hasNext();){

//OrderItem item = (OrderItem) it.next();

//if (item.getPrice() < price) {

只能使用跌带器提供的remove方法。

//it.remove();

//}

//}

return orderItems;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值