问题描述
注意:我不是指的是 java class Mapping:
def __init__(self,iterable):
self.items_list = []
Mapping.update(self,iterable)
def update(self,iterable):
for item in iterable:
self.items_list.append(item)
/enum
而是如何将集合中每个元素的序号/索引与元素相关联。我正在寻找相当于:
scala :
enumeration
蟒蛇:
(1 to 10).zipwithIndex.foreach{ case (obj,i) => println(s"Obj[$i]=$obj") }obj.length}
javascript :
for i,obj in enumerate(range(1,11)):
print(f"obj[{i}]={str(obj)}")
java 似乎没有完美/简单的模拟?我们是否需要像这个问题一样使用有点笨拙的手册 var myList= [...Array(10)].map((_,i) => 1+i)
myList.forEach( (obj,i) => console.log(`obj[${i}]=${obj}`))
列表? How to zip two Java Lists ?将索引与列表元素关联的最简洁方法是什么?
解决方法
List 可以被转换成一个以索引为键的映射,如下所示:
IntStream.range(0,list.size())
.boxed()
.collect(Collectors.toMap(i -> i,i -> list.get(i)));
如果不需要 Map
,Stream API 提供 IntStream::forEach
方法:
IntStream.range(0,list.size())
.forEach(i -> System.out.println(i + " -> " + list.get(i)));
也可以使用 Iterable::forEach
并单独计算索引(例如使用 AtomicInteger
):
AtomicInteger index = new AtomicInteger(0);
list.forEach(x -> System.out.println(index.getAndIncrement() + " -> " + x));