用java将for循环获得的数组放入list集合的每个单条中

Java for-each循环解惑 - ImportNew
从Java5起,在Java中有了for-each循环,可以用来循环遍历collection和array。For each循环允许你在无需保持传统for循环中的索引,或在使用iterator /ListIterator时无需调用while循环中的hasNext()方法就能遍历collection。Java中,for-each循环简化了任何Collection或array的遍历过程,但并不是每个Java程序员都了解本文将要描述的for-each 循环的一些细节。与 Java5 发布的其他术语:释放别名泛型,自动封装和可变参数不同,Java开发者对for-each循环的使用比任何其他特性更加频繁,但当问及高级的for-each循环怎样工作,或什么是在for-each循环中使用Collection时的基本需求时,就不是每个人都能够回答的了。本篇教程和例子旨在通过深入研究for-each 循环中几个有趣的难题来填补上述空白(说明上述问题)。好了,不再赘述,一起看看我们在Java5 for-each循环的第一个问题。
高级循环问题 1
考虑下面这段遍历一个用户自定义的aggregator或collection类的代码,这段代码将会打印出什么,抛出异常还是编译器错误:
* Java Class to show how for-each loop works in Java
public class ForEachTest {
public static void main(String args[]){
CustomCollection&String& myCollection = new CustomCollection&String&();
myCollection.add(&Java&);
myCollection.add(&Scala&);
myCollection.add(&Groovy&);
//What does this code will do, print language, throw exception or compile time error
for(String language: myCollection){
System.out.println(language);
下面是我们的CustomCollection类,这是个参数为泛型的类,与任何其他的Collection类相似,依靠于ArrayList并提供从Collection中添加和删除项的方法。
public class CustomCollection&T&{
private ArrayList&T&
public CustomCollection(){
bucket = new ArrayList();
public int size() {
return bucket.size();
public boolean isEmpty() {
return bucket.isEmpty();
public boolean contains(T o) {
return bucket.contains(o);
public boolean add(T e) {
return bucket.add(e);
public boolean remove(T o) {
return bucket.remove(o);
上述代码将无法通过编译,这是因为我们的CustomCollection类没有实现java.lang.Iterable接口,编译期错误如下:
Exception in thread &main& java.lang.RuntimeException: Uncompilable source code - for-each not applicable to expression type
required: array or java.lang.Iterable
test.CustomCollection
at test.ForEachTest.main(ForEachTest.java:24)
从中了解到的一个有趣的事实是:for-each循环仅应用于实现了Iterable接口的Java array和Collection类,而且既然所有内置Collection类都实现了java.util.Collection接口,已经继承了Iterable,这一细节通常会被忽略,这点可以在Collection接口的类型声明“ public interface Collection extends Iterable”中看到。所以为了解决上述问题,你可以选择简单地让CustomCollection实现Collection接口或者继承AbstractCollection,这是默认的通用实现并展示了如何同时使用抽象类和接口以获取更好的灵活性。现在让我们来看看for-each循环的第二个难题:
Java for-each循环的第二个难题:
在下面的代码示例将会抛出ConcurrentModificationException异常。这里我们使用标准iterator和for-each循环遍历ArrayList,随后删除元素,你需要找出哪段代码将会抛出ConcurrentModificationException ,为什么?请注意,答案可能是两个都会,都不会或其中之一。
import java.util.ArrayL
import java.util.C
import java.util.I
* Java class to demonstrate inner working of for-each loop in Java
* @author Javin Paul
public class ForEachTest2 {
public static void main(String args[]){
Collection&String& list = new ArrayList&String&();
list.add(&Android&);
list.add(&iPhone&);
list.add(&Windows Mobile&);
// Which Code will throw ConcurrentModificationException, both,
// none or one of them
// example 1
Iterator&String& itr = list.iterator();
while(itr.hasNext()){
String lang = itr.next();
list.remove(lang);
// example 2
for(String language: list){
list.remove(language);
大约70%的Java开发者都会说第一个代码块会抛出ConcurrentModificationException异常,因为我们没有用iterator的remove方法来删除元素,而是使用ArrayList的 remove()方法。但是,没有多少Java开发者会说出for-each循环也会出现同样的问题,因为我们在这里没有使用iterator。事实上,第二个代码片段也会抛出ConcurrentModificationException异常,这点在解决了第一个困惑之后就变得很明显了。既然for-each循环内部使用了Iterator来遍历Collection,它也调用了Iterator.next(),这会检查(元素的)变化并抛出ConcurrentModificationException。你可以从下面的输出中了解到这点,在注释掉第一个代码段后,当你运行第二个代码段时会得到下面的输出。
Exception in thread &main& java.util.ConcurrentModificationException
at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:372)
at java.util.AbstractList$Itr.next(AbstractList.java:343)
at test.ForEachTest2.main(ForEachTest2.java:34)
以上就是关于Java5 for-each循环的全部内容。我们已经看到了Java程序员在编写遍历Collection类的代码时产生的很多问题,特别是在遍历collection的同时删除元素的时候。请牢记,在从任何Collection(例如Map、Set或List)中删除对象时总要使用Iterator的remove方法,也请谨记for-each循环只是标准Iterator代码标准用法之上的一种语法糖(syntactic sugar)而已。
译者注:语法糖(syntactic sugar),也译为糖衣语法,是由英国计算机科学家彼得·约翰·兰达-Peter J. Landin发明的一个术语,指计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用。通常来说使用语法糖能够增加程序的可读性,从而减少程序代码出错的机会。
原文链接:
- 译文链接: [ 转载请保留原文出处、译者和译文链接。]
关于作者:
(新浪微博:)
写的很好,简单容易理解
关于ImportNew
ImportNew 专注于 Java 技术分享。于日 11:11正式上线。是的,这是一个很特别的时刻 :)
ImportNew 由两个 Java 关键字 import 和 new 组成,意指:Java 开发者学习新知识的网站。 import 可认为是学习和吸收, new 则可认为是新知识、新技术圈子和新朋友……
新浪微博:
推荐微信号
反馈建议:@
广告与商务合作QQ:
– 好的话题、有启发的回复、值得信赖的圈子
– 写了文章?看干货?去头条!
– 为IT单身男女服务的征婚传播平台
– 优秀的工具资源导航
– 活跃 & 专业的翻译小组
– 国内外的精选博客文章
– UI,网页,交互和用户体验
– JavaScript, HTML5, CSS
– 专注Android技术分享
– 专注iOS技术分享
– 专注Java技术分享
– 专注Python技术分享
& 2017 ImportNew如何在JS里面 循环获得${LIST}里面每一个值 - ITeye问答
例如我在后台已经获得 sinList 里面是值是49
然后我在后台也传回了sinList的size sinSize 是3
我现在就想在JS里面用一个for(j=0;j&sinSj++)
{
&& var sin = ${sinList[j]}
}
获得sinList[j] 里面的三个值。
要如何弄?这样直接是获取不到J的。但是我用
&% int k=0;%&
for(j=0;j&sinSj++)
{
&& var sin = ${sinList[k]}
&%k++;%&
}
采纳的答案
&script&
//1、首先创建js数组
var array = new Array();
//2、通过c标签循环sinList 并生成添加到array的字符串
&c:forEach items="${sinList}" var="a"&
&& array.push(${a}); //生成如 array.push(123)的字符串 这样前台拿到后就是js
&/c:forEach&
//3、接下来就可以在台拿到array进行操作
//为什么要这么做?
使用el表达式
&c:forEach items="${sinList}" varStatus="status" var="item"&
var sinId = ${item};&&
&/c:forEach&
&script type="text/javascript"&
var list = ${sinList};
if(getListIdTwo[i].checked){
for(var i = 0; i & list. i++ ){
var sinId = list[i];
亲,java代码是在服务器端执行的,js代码才是在客户端执行的~固你的js应该只是接收后台执行结果,js套java以及jstl都是不对的。如果后台是集合对象是ArrayList可以这样写~因为它的toString方法返回结果就是字符串形式的数组。eg."[1,2,3]"
&script type="text/javascript"&
var list = ${sinList};
if(getListIdTwo[i].checked){
if(getListIdTwo[i].checked)
&%int k=0;%&
for(j=0;j&${sinSize};j++){
var newInputId = getListIdTwo[i].
var sinId = ${sinList[k]};
//if(newInputId == ${sinList[j]}){
// alert("对不起,你需要删除类别包含原设备类别参数。只能删除新增的类别参数!");
for(var i=0;i&sinSi++){
& var currentValue = sinList[i];
}
返回数据类型为ajax类型
已解决问题
未解决问题&for each是jdk5.0新增加的一个循环结构,可以用来以此处理数组中的每个元素(其他类型的元素集合也可以)而不用为指定下标而分心。
for(type itr-var : iterableObj) statement-block
&&& 定义一个变量用于暂存集合中的每一个元素,并执行相应的语句(当然,也可以是语句块)。集合表达式必须是一个数组或者是一个实现了lterable接口的类(例如ArrayList)对象。
public class ClsTest {
&&& public static void main(String[] args) {
&&&&&&&&&&& int[] a=new int[10];
&&&&&&&&&&& for(int b:a){
&&&&&&&&&&& System.out.println(b);
对于集合类型和数组类型的,我们都可以通过foreach语法来访问它。上面的例子中,以前我们要依次访问数组,挺麻烦:
public class MainClass {
& public static void main(String args[]) {
&&& int nums[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
&&& for(int x : nums) {
&&&&& System.out.print(x + " ");
&&&&& x = x * 10; // no effect on nums
&&& System.out.println();
&&& for(int x : nums)
&&&&& System.out.print(x + " ");
&&& System.out.println();
现在只需下面简单的语句即可:
for (type identifier : iterable_expression) {
& // statements
public class MainClass {
& enum Season {
&&& spring, summer, fall, winter
& public static void main(String[] args) {
&&& for (Season season : Season.values()) {
&&&&& System.out.println(" The season is now " + season);
对集合的访问效果更明显。以前我们访问集合的代码:
import java.util.ArrayL
public class MainClass {
& public static void main(String args[]) {
&&& ArrayList&Double& list = new ArrayList&Double&();
&&& list.add(10.14);
&&& list.add(20.22);
&&& list.add(30.78);
&&& list.add(40.46);
&&& double sum = 0.0;
&&& for(double itr : list)
&&&&& sum = sum +
&&& System.out.println(sum);
另一种方法
public class MainClass {
& public static void main(String args[]) {
&&& int nums[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
&&& int sum = 0;
&&& // use for-each style for to display and sum the values
&&& for(int x : nums) {
&&&&& System.out.println("Value is: " + x);
&&&&& sum +=
&&& System.out.println("Summation: " + sum);
Value is: 1
Value is: 2
Value is: 3
Value is: 4
Value is: 5
Value is: 6
Value is: 7
Value is: 8
Value is: 9
Value is: 10
Summation: 55

我要回帖

更多关于 php 循环放入数组 的文章

 

随机推荐