我找不到forEach方法,该方法用当前对象和当前索引调用lamda。
不幸的是,这不是在Java8中实现的,因此无法实现以下实现:
List<String> list = Arrays.asList("one", "two");
list.forEach((element, index) -> System.out.println(String.format("[%d] : %s", index, element)));
我知道执行此操作的一种简单方法是为每个循环使用索引整数:
List<String> list = Arrays.asList("one", "two");
int index = 0;
for (String element : list) {
System.out.println(String.format("[%d] : %s", index++, element));
}
我认为初始化索引整数并为每次迭代增加索引的通用代码应移至方法中。因此,我定义了自己的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++);
}
}
我可以像这样使用它:
List<String> list = Arrays.asList("one", "two");
forEach(list, (element, index) -> System.out.println(String.format("[%d] : %s", index, element)));
我在任何util库(例如guava)中都找不到类似的实现。 所以我有以下问题:
Iterable.forEach
methdod中实现?答案 0 :(得分:4)
如果您想使用proc = subprocess.Popen(t"<path to python>", "<path to your script>"], stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=False)
stdout, stderr = proc.communicate()
,可以这样使用forEach
:
IntStream
答案 1 :(得分:0)
我在Is there a concise way to iterate over a stream with indices in Java 8?这篇帖子中在Eclipse集合中找到了util方法
Iterate.forEachWithIndex(people, (Person person, int index) -> LOGGER.info("Index: " + index + " person: " + person.getName()));
public static <T> void forEach(@NonNull Iterable<T> iterable, @NonNull ObjIntConsumer<T> consumer) {
int i = 0;
for (T t : iterable) {
consumer.accept(t, i++);
}
}