`
rensanning
  • 浏览: 3548156 次
  • 性别: Icon_minigender_1
  • 来自: 大连
博客专栏
Efef1dba-f7dd-3931-8a61-8e1c76c3e39f
使用Titanium Mo...
浏览量:38136
Bbab2146-6e1d-3c50-acd6-c8bae29e307d
Cordova 3.x入门...
浏览量:607282
C08766e7-8a33-3f9b-9155-654af05c3484
常用Java开源Libra...
浏览量:682284
77063fb3-0ee7-3bfa-9c72-2a0234ebf83e
搭建 CentOS 6 服...
浏览量:89330
E40e5e76-1f3b-398e-b6a6-dc9cfbb38156
Spring Boot 入...
浏览量:401828
Abe39461-b089-344f-99fa-cdfbddea0e18
基于Spring Secu...
浏览量:69687
66a41a70-fdf0-3dc9-aa31-19b7e8b24672
MQTT入门
浏览量:91697
社区版块
存档分类
最新评论

Java增强for循环中获取index

    博客分类:
  • Java
 
阅读更多
前提测试数据:
String[] data = new String[]{"rensanning001", "rensanning002", "rensanning003"};
List<String> dataList = Arrays.asList(data);


普通的For循环:
for (int i = 0; i < dataList.size(); i++) {
  System.out.println(i + ":" + dataList.get(i));
}


增强For循环(获取index需要定义额外的变量):
int i = 0;
for (String elem : dataList) {
  System.out.println(i + ":" + elem);
  i++;
}


自定义静态方法实现带index的循环:
for (Indexer<String> elem : ExtFor1.loop(dataList)) {
  System.out.println(elem.index() + ":" + elem.value());
}

public class ExtFor1 {
	
	public static <T> Iterable<Indexer<T>> loop(final Iterable<T> list) {
		return new Iterable<Indexer<T>>() {
			@Override
			public Iterator<Indexer<T>> iterator() {
				return new Iterator<Indexer<T>>() {
					private int counter = 0;
					private Iterator<T> iterator = list.iterator();

					@Override
					public boolean hasNext() {
						return iterator.hasNext();
					}

					@Override
					public Indexer<T> next() {
						Indexer<T> elem = new Indexer<T>(counter++, iterator.next());
						return elem;
					}

					@Override
					public void remove() {
						throw new RuntimeException();
					}
				};
			}
		};
	}

}


扩展Iterable实现带index的循环:
for (Indexer<String> elem : ExtFor2.loop(dataList)) {
  System.out.println(elem.index() + ":" + elem.value());
}

public class ExtFor2<T> implements Iterable<Indexer<T>> {
    private Iterator<T> iterator;

    private ExtFor2(Iterable<T> iter) {
        this.iterator = iter.iterator();
    }

    public static <T> ExtFor2<T> loop(Iterable<T> iter) {
        return new ExtFor2<T>(iter);
    }

    @Override
    public Iterator<Indexer<T>> iterator() {
		return new Iterator<Indexer<T>>() {
			private int counter = 0;

			@Override
			public boolean hasNext() {
				return iterator.hasNext();
			}

			@Override
			public Indexer<T> next() {
				Indexer<T> elem = new Indexer<T>(counter++, iterator.next());
				return elem;
			}

			@Override
			public void remove() {
				throw new RuntimeException();
			}
		};
	}

}


jquery风格的for循环:
For.each(dataList, new For.Function<String>() {
  public void execute(int index, String elem) {
    System.out.println(index + ":" + elem);
  }
});

public class For {
	
	public static <T> void each(List<T> list, Function<T> function) {
		int length = list.size();
		for (int index = 0; index < length; index++) {
			function.execute(index, list.get(index)); 
		}
	}

	public static interface Function<T> {
		public void execute(int index, T obj);
	}
}


public class Indexer<T> {
	private final int index;
	private final T value;

	public Indexer(int index, T value) {
		this.index = index;
		this.value = value;
	}

	public int index() {
		return this.index;
	}

	public T value() {
		return this.value;
	}
}


分享到:
评论

相关推荐

    java 中如何从LIST 对象取值

    除了使用`get()`方法之外,我们还可以使用迭代器(`Iterator`)或增强型`for`循环(也称为“foreach”循环)来遍历`List`中的元素。这两种方法都避免了直接使用索引,这可以减少潜在的数组越界错误。 ##### 使用`...

    Java 实例 - 获取向量元素的索引值源代码-详细教程.zip

    在这个例子中,我们首先创建了一个包含三个字符串元素的向量,然后使用增强的for循环(foreach)遍历向量,通过调用`get()`方法获取每个元素的值,并打印出索引和值。 除了使用迭代器,还可以使用传统的索引访问...

    java、python、JavaScript以及jquery循环语句的区别

    此外,Java 5引入了增强型for循环(也称为foreach循环),简化了遍历数组和集合的过程: ```java int[] arr = {1, 2, 3, 4}; for(int element : arr) { System.out.println(element); } ``` Java中的循环控制...

    JavaList.rar_javalist

    遍历列表,通常使用增强for循环(foreach)或者迭代器: ```java // 使用增强for循环 for (String element : myList) { System.out.println(element); } // 使用迭代器 Iterator&lt;String&gt; iterator = myList....

    java 如何使用charAt()方法计算重复字符

    使用for循环或增强for循环遍历字符串长度。 3. 在循环中,通过`charAt(index)`获取当前索引对应的字符。 4. 检查这个字符是否已经在HashSet中。如果是,说明是重复字符,可以进行相应处理,比如统计次数或打印...

    Java习题_java编程_

    7. **字符串处理**:String类在Java中是不可变的,提供了丰富的字符串操作方法,如concat、substring、indexOf、replace等。 8. **IO流**:Java的I/O流处理涵盖了文件读写、网络通信等多种场景,包括字节流和字符流...

    Java2+学习指南.zip

    1. **Java语法**:包括基本数据类型、变量、运算符、流程控制(如if语句、for循环、while循环)、方法定义和调用。 2. **面向对象编程**:封装、继承、多态等概念,以及类、对象、接口和抽象类的使用。 3. **异常...

    JAVA课程的完整课件

    1. **Java基础**:包括基本语法、数据类型、变量、运算符、控制结构(如if语句、for循环、while循环)、方法定义和调用等。 2. **面向对象编程**:讲解类、对象、封装、继承、多态等面向对象的基本概念,以及如何在...

    关于 Java Collections API 您不知道的 5 件事

    Java 5 引入了增强的 for 循环,这极大地简化了遍历集合的过程。在此之前,开发人员需要手动获取 Iterator 并使用 `next()` 方法来迭代集合中的每个元素。而现在,只需一个简单的 for-each 循环即可遍历任何实现了 `...

    泛型+枚举+反射.docx

    在Java中,静态导入、自动拆装箱和增强for循环是提高代码可读性和简洁性的现代特性。反射则进一步扩展了Java的灵活性,使开发者能够在运行时检查和修改程序的行为。这些技术的结合使用,能够帮助我们编写更加健壮、...

    java基础教程(完整版IBM)

    3. **基础语法**:掌握Java的基础语法,包括数据类型(如整型、浮点型、字符型和布尔型)、变量、常量、运算符、流程控制语句(如if条件语句、switch选择语句、for、while循环等)。 4. **类与对象**:理解面向对象...

    Java系列ArrayList

    可以通过迭代器(Iterator)或增强for循环遍历ArrayList中的所有元素。 ```java // 使用迭代器 Iterator&lt;String&gt; iterator = list.iterator(); while (iterator.hasNext()) { System.out.println(iterator.next())...

    java集合.docx

    - 增强for循环遍历 - 迭代器遍历 - 列表迭代器(ListIterator)遍历,允许在遍历过程中修改集合 2. **Set集合** - **特点**:Set是无序的,不允许元素重复,没有索引。 - **子类**:HashSet和TreeSet - **...

    JAVA面试宝典包含名词解释,常问问题。

    - 增强 for 循环遍历:通过 `for (Map.Entry, Value&gt; entry : map.entrySet())` 进行遍历。 - values 方法遍历:通过 `map.values()` 获取所有值并遍历。 9. **List 集合特性**: ArrayList 是基于数组实现的 ...

    12道java经典上机测试题含答案

    12. **集合框架的高级用法**:TreeSet、TreeMap的排序原理,Comparator和Comparable接口的实现,以及集合的遍历方式(迭代器与增强for循环)。 以上知识点涵盖了Java编程的基础到进阶内容,通过解答这些题目,初学...

    java遍历Map的几种方法分析

    Java 5引入了增强的for循环(也称为foreach循环),使得遍历Map变得非常简洁。通过`Map.entrySet()`方法,我们可以获取到Map的所有Entry对象的集合,然后使用for-each循环来遍历每个Entry,如下所示: ```java ...

    黑马程序员入学Java精华总结

    - Java5引入了泛型和增强的for循环,使数组操作更加方便。 #### 三、面向对象(1) 1. **什么叫面向对象?** - 面向对象编程(OOP)是一种编程范式,通过使用“对象”来设计软件和实现其功能。 2. **类** - 类...

    java 基础 java 基础

    4. **控制流程**:Java提供了多种控制流程结构,如条件语句(if-else,switch-case)、循环(for,while,do-while)和跳转语句(break,continue)。 5. **异常处理**:Java通过try-catch-finally块进行异常处理,...

Global site tag (gtag.js) - Google Analytics