标签: iterable

Java中的迭代器行为

我对Java中的迭代器行为有疑问.

我有一个这样的电话:

myIterable.iterator().hasNext()

如果此调用返回true,我可以确定该集合至少有两个元素吗?从Java API规范中,我只能发现真正意味着还有一个元素可以通过它来实现next().但是如果指针位于最开始会发生什么(意味着是否hasNext()可以单独识别第一个元素)

http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Iterator.html

如果迭代有更多元素,则表示为true.但更多元素也可能意味着第一个?

[编辑]

我怎么知道迭代器是否有两个要迭代的元素?当然,我可以迭代和计数,但我无法返回或迭代两次或在我的情况下克隆迭代器,这是一个Hadoop迭代器.

java iterator iterable

1
推荐指数
1
解决办法
6179
查看次数

Java - 具有自己的 hasNext() 和 next() 的可迭代:如何做对?

我有一个实现 Iterable 的类,但有自己的hasNext()和这样的next()方法:

public class BLMovie implements Iterable<BLMovieFrame> {

@Override
public Iterator<BLMovieFrame> iterator() {
    iteratorVar = 0;
    return liste.iterator();
}

public boolean hasNext() {
    if (loop)
        return true;
    return iteratorVar < liste.size();
}

public BLMovieFrame next() {
    iteratorVar = (iteratorVar++)%(liste.size()-1);
    return liste.get(iteratorVar);
}

public void remove() {
    throw new UnsupportedOperationException();
}
Run Code Online (Sandbox Code Playgroud)

我很确定这不是最好的方法,
关于 Iterable 的其他线程似乎并不关心自己的下一个方法,所以有人对我有建议吗?

java iterator iterable

1
推荐指数
1
解决办法
1万
查看次数

如何对可迭代对象进行排序

我有一个实现 Iterable 的自定义列表(不是集合!!)。我没有实现 List ,因为这会带来太多我不想要的方法,而且我不需要。

关于我的 CustomList 的更多信息:

  • 所有成员都是最终的
  • 每个 CustomList 都可以有一个“SubList”,它是另一个 CustomList
  • 每个 CustomList 必须只有一个 MyThing
  • 示例:假设 A 是 MyThing 的对象,B 是 MyThing 的对象,可以有一个只有 A(我们称之为 AList)的 CustomList 和一个带有 Item B 和 AList 作为 Sublist 的 CustomList。
  • CustomList 有一个可以接受 MyThings 数组的构造函数

所以这是我的班级:

public class CustomList implements Iterable<MyThing> {

   private final CustomList sublist;

   private final MyThing thing;

   // getters and other methods
}
Run Code Online (Sandbox Code Playgroud)

我有一个

Comparator<MyThing>
Run Code Online (Sandbox Code Playgroud)

我的事情:

public class MyThing {

   private final IntArrayList values;
   // more members and methods
}
Run Code Online (Sandbox Code Playgroud)

我想获得一个排序副本作为我的 …

java sorting iterable

1
推荐指数
1
解决办法
1万
查看次数

Angular ngFor使用地图

我使用的是离子3,因此是角度和打字稿。

我想要实现的是将ngFor与Map类型结合使用。

这是我所拥有的:

interface IShared_Position {
lat: number;
lng: number;
time: number;
color?: string;
}
public shared_position = new Map<string, IShared_Position>();
Run Code Online (Sandbox Code Playgroud)

现在从html方面,我有:

    <ion-list>
  <ion-item ion-item *ngFor="let item of shared_position">
    <h2>{{ item.time }}</h2>
  </ion-item>
Run Code Online (Sandbox Code Playgroud)

现在,这给了我以下错误:

错误:找不到类型为“对象”的其他支持对象“ [对象图]”。NgFor仅支持绑定到Iterables,例如数组。

现在有什么可能的方法,即使它不是可迭代的,我也无法绑定我的地图?

我该怎么办?

iterable typescript ngfor angular

1
推荐指数
2
解决办法
2980
查看次数

Pytorch DataLoader 迭代顺序稳定吗?

Pytorch Dataloader 的迭代顺序是否保证相同(在温和条件下)?

例如:

dataloader = DataLoader(my_dataset, batch_size=4,
                        shuffle=True, num_workers=4)
print("run 1")
for batch in dataloader:
  print(batch["index"])

print("run 2")
for batch in dataloader:
  print(batch["index"])

Run Code Online (Sandbox Code Playgroud)

到目前为止,我已经尝试对其进行测试,但它似乎没有修复,两次运行的顺序相同。有没有办法使订单相同?谢谢

编辑:我也试过做

unlabeled_sampler = data.sampler.SubsetRandomSampler(unlabeled_indices)
unlabeled_dataloader = data.DataLoader(train_dataset, 
                sampler=unlabeled_sampler, batch_size=args.batch_size, drop_last=False)
Run Code Online (Sandbox Code Playgroud)

然后遍历数据加载器两次,但结果是相同的不确定性。

iterable deterministic pytorch dataloader

1
推荐指数
1
解决办法
4048
查看次数

将 List&lt;T?&gt; 转换或转换为 List&lt;T&gt;?

我正在寻找一种方便的方法来安全地将 a List<T?>to List<T>?(或更一般地说,Iterable<T?>to Iterable<T>?)投射到不过滤任何元素的情况下。

换句话说,如果所有元素都不为空,则取列表。

在 Swift 中,我可以这样做:

let a: [Int?] = [1, nil, 3]
let b: [Int?] = [1, 2, 3]

let aa = a as? [Int] // nil
let bb = b as? [Int] // [1, 2, 3]
Run Code Online (Sandbox Code Playgroud)

在科特林中,同样看代码只是做一个未经检查的演员和工作不会导致aanull

val a = listOf<Int?>(1, null, 3)
val b = listOf<Int?>(1, 2, 3)

val aa = a as? List<Int> // [1, null, 3]
val bb = b as? List<Int> // …
Run Code Online (Sandbox Code Playgroud)

iterable casting kotlin

1
推荐指数
1
解决办法
130
查看次数

Java:为什么 java.util.Collections.list(Enumeration) 具有破坏性?

我有一个小程序,它依赖于从本地网络接口获取一些信息。然后,我需要添加一些功能,这又需要这些信息。我不想碰我经过测试和高度使用的方法。因此,迫于时间的压力,我决定重用该方法,有效地将 NetworkInterface Enumeration 转换为 ArrayList两次(这不是我最自豪的编码时刻!)。

经过测试,我发现它真的不起作用!

动作顺序:

  1. 我从操作系统中获取 NetworkInterface Enumeration 一次,进入一个类字段
  2. myMethod 将 NetworkInterface Enumeration 转换为 ArrayList,进行一些分析并返回一些信息,以执行某些操作
  3. myMethod 将 NetworkInterface Enumeration 转换为 ArrayList,进行一些分析并返回一些信息,以执行其他操作

我注意到,在第二次翻译中,结果为零!在调试中,我注意到我的枚举有一个字段“i”。该字段:第一次,它等于 55(我的 IF 的计数),第二次,它等于 0...

我提供了一小段代码,为了您的调试乐趣,应该重现它(我使用的是 Java 8):

import java.net.NetworkInterface;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Enumeration;

public class CollectionsListDemo {
    public static void main(String[] args) {
        ArrayList<NetworkInterface> netFacesArList1;
        ArrayList<NetworkInterface> netFacesArList2;
        try {
            Enumeration<NetworkInterface> netFaces = NetworkInterface.getNetworkInterfaces();
            netFacesArList1 = Collections.list(netFaces);
            netFacesArList2 = Collections.list(netFaces);
        } catch (Exception e) {
            throw new RuntimeException("whatever");
        }

        System.out.println(netFacesArList1.size()); // 55, …
Run Code Online (Sandbox Code Playgroud)

java collections iterable list arraylist

1
推荐指数
1
解决办法
48
查看次数

Scala展平深度函数混淆

我对有关此功能的文档/提供的使用示例感到有些困惑。是否flatten只能发生一次?喜欢

List(List(1, 2), List(3, List(4, 5, 6))) -> List(1, 2, 3, List(4, 5, 6))
Run Code Online (Sandbox Code Playgroud)

或者您以某种方式指定展平的深度,以便它可以成为List(1, 2, 3, 4, 5, 6)?

因为,例如,在 JS 中,函数似乎可以flat()进入一维数组的任何深度。Scala 能flatten做到这一点还是只能提升一次?

我正在尝试自己重新创建该功能,并希望模仿所需的行为并了解其工作方式可能不同的原因。

iterable scala flatten scala-collections

1
推荐指数
1
解决办法
94
查看次数

反复重新分配指向可迭代的变量

考虑以下代码:

import more_itertools as mo

def rep(x, n):
    for i in range(n):
        yield x

xs = [0]
for n in [1, 2, 3]:
    xs = mo.flatten(rep(x, n) for x in xs)

print(mo.ilen(xs))
Run Code Online (Sandbox Code Playgroud)

正确答案应该是 6,但它打印出 27,为什么?

请注意,它more_itertools.flatten做了显而易见的事情,实际上是itertools.chain.from_iterable. more_itertools.ilen也做了显而易见的事情,只计算元素。我不认为所涉及的功能有任何错误,只是重新签名的问题xs

python iterable

1
推荐指数
1
解决办法
54
查看次数

如何在迭代列表时修改列表元素?

在 Python 中,迭代列表时无法修改列表。例如,下面我无法修改list_1,并且结果print将是[0, 1, 2, 3, 4]。在第二种情况下,我循环遍历类实例列表,并调用该set_n方法修改列表中的实例,同时迭代它。确实,意志print给予[4, 4, 4, 4, 4]

这两个案例有何不同,为什么?

# First case: modify list of integers 
list_1 = [0, 1, 2, 3, 4]
for l in list_1:
    l += 1
print(list_1)

# Second case: modify list of class instances
class Foo:
    def __init__(self, n):
        self.n = n
        
    def set_n(self, n):
        self.n = n
        
list_2 = [Foo(3)] * 5
for l in list_2:
    l.set_n(4)
print([l.n for …
Run Code Online (Sandbox Code Playgroud)

python iterable list

1
推荐指数
1
解决办法
2602
查看次数