Java:来自 Set 的枚举

发布于 2024-11-29 16:16:10 字数 484 浏览 0 评论 0 原文

我有一个简单的集合问题。我有一个 设置对象。我想要一个 Set 中 String 的枚举。我需要一个 Enumeration 因为我要重写专门返回 Enumeration 的方法。最干净/最好的方法是什么?

I have a simple collections question. I have a Set<String> object. I want an Enumeration<String> of the Strings in that Set. I need an Enumeration<String> since I am overriding a method that specifically returns an Enumeration<String>. What is the cleanest/best way to go about it?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

旧瑾黎汐 2024-12-06 16:16:10

<代码>java.util.Collections.enumeration(set)

Javadoc

返回指定集合的​​枚举。这提供了
与需要枚举的遗留 API 的互操作性
输入。

java.util.Collections.enumeration(set)

Javadoc

Returns an enumeration over the specified collection. This provides
interoperability with legacy APIs that require an enumeration as
input.

锦上情书 2024-12-06 16:16:10

编辑:没有必要编写你自己的(尽管我将把下面的实现留给后代) - 请参阅 Kevin Bourrillion 的回答对于 JDK 中的那个。


如果您确实需要枚举,可以使用:

Enumeration<String> x = new Vector(set).elements();

如果可能的话,最好使用Iterable...

更好的选择是编写一个围绕 Iterator 的小包装类。这样您就不必仅仅为了查找 Enumeration 的实现而获取副本:

import java.util.*;

class IteratorEnumeration<E> implements Enumeration<E>
{
    private final Iterator<E> iterator;
    
    public IteratorEnumeration(Iterator<E> iterator)
    {
        this.iterator = iterator;
    }
    
    public E nextElement() {
        return iterator.next();
    }
    
    public boolean hasMoreElements() {
        return iterator.hasNext();
    }
    
}


public class Test {
    public static void main(String[] args) {
        Set<String> set = new HashSet<String>(); 
        Enumeration<String> x = new IteratorEnumeration<String>(set.iterator());
    }
}

EDIT: There's no need to write your own (although I'll leave the implementation below for posterity) - see Kevin Bourrillion's answer for the one in the JDK.


If you really need an enumeration, could could use:

Enumeration<String> x = new Vector(set).elements();

It would be better to use Iterable<E> if at all possible though...

A better alternative is to write a small wrapper class around Iterator<E>. That way you don't have to take a copy just to find an imlementation of Enumeration<E>:

import java.util.*;

class IteratorEnumeration<E> implements Enumeration<E>
{
    private final Iterator<E> iterator;
    
    public IteratorEnumeration(Iterator<E> iterator)
    {
        this.iterator = iterator;
    }
    
    public E nextElement() {
        return iterator.next();
    }
    
    public boolean hasMoreElements() {
        return iterator.hasNext();
    }
    
}


public class Test {
    public static void main(String[] args) {
        Set<String> set = new HashSet<String>(); 
        Enumeration<String> x = new IteratorEnumeration<String>(set.iterator());
    }
}
迷你仙 2024-12-06 16:16:10

假设您指的是数学意义上的枚举,最简洁的方法是通过 for 循环,适用于任何实现 Iterable 的类:

Set<String> strs = ...

for (String s : strs) {
 ...
}

如果您确实需要 Enumeration,您可以实现一个适配器类来包装通过调用 iterator() 返回的 Iterator。 Apache Collections 库中有一个适配器类: IteratorEnumeration

或者你可以使用 Google 的 Guava 库:

Set<String> mySet = ...
Enumeration<String> = Iterators.asEnumeration(mySet.iterator());

Assuming you mean enumeration in the mathematical sense the cleanest way to do this is via a for-loop, applicable to any class that implements Iterable:

Set<String> strs = ...

for (String s : strs) {
 ...
}

If you really require an Enumeration you could implement an adapter class to wrap the Iterator returned by calling iterator(). There is an adapter class in the Apache Collections library: IteratorEnumeration.

Or you could use Google's Guava library:

Set<String> mySet = ...
Enumeration<String> = Iterators.asEnumeration(mySet.iterator());
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文