Cod*_*les -1 java foreach java-8
我找不到使用当前对象和当前索引调用 lamda 的 forEach 方法。
不幸的是,这在 java8 中没有实现,所以下面的实现是不可能的:
List<String> list = Arrays.asList("one", "two");
list.forEach((element, index) -> System.out.println(String.format("[%d] : %s", index, element)));
Run Code Online (Sandbox Code Playgroud)
我知道一个简单的方法是使用带有索引整数的 for each 循环:
List<String> list = Arrays.asList("one", "two");
int index = 0;
for (String element : list) {
System.out.println(String.format("[%d] : %s", index++, element));
}
Run Code Online (Sandbox Code Playgroud)
我认为初始化索引整数并为每次迭代增加它的通用代码应该移到一个方法中。所以我定义了自己的forEach方法:
public static <T> void forEach(@NonNull Iterable<T> iterable, @NonNull ObjIntConsumer<T> consumer) {
int i = 0;
for (T t : iterable) {
consumer.accept(t, i++);
}
}
Run Code Online (Sandbox Code Playgroud)
我可以像这样使用它:
List<String> list = Arrays.asList("one", "two");
forEach(list, (element, index) -> System.out.println(String.format("[%d] : %s", index, element)));
Run Code Online (Sandbox Code Playgroud)
我无法在任何 util 库(例如番石榴)中找到类似的实现。所以我有以下问题:
Iterable.forEachmethdod 中没有实现这有什么原因吗?如果你想使用forEach你可以IntStream像这样使用:
IntStream.range(0, list.size())
.forEach(index -> System.out.println(String.format("[%d] : %s", index, list.get(index))));
Run Code Online (Sandbox Code Playgroud)