【问题标题】:Convert a Linked List of type Integer to Set of type String in JAVA在 JAVA 中将 Integer 类型的链表转换为 String 类型的 Set
【发布时间】:2017-04-17 03:35:17
【问题描述】:

我有一个ListIntegers,但我想把那个List 转换成HashSet

例如我的清单如下:

1234
5678
1234
7627
4328

但我想采用 list 并将整数字符串转换为 HashSet,因此它不包含重复。实现这一目标的最佳方法是什么?

我的list 定义为

static List<Integer> list;

而我的HashSet 被定义为

static HashSet<String> set = new HashSet<String>(list);

我的错误是我无法从 int 转换为 string,那么我该怎么做才能解决这个问题?

【问题讨论】:

  • 如果您只想消除重复,HashSet&lt;Integer&gt; 有什么问题?您真的需要将它们存储为字符串吗?
  • 是一串整数
  • “一串整数”?我以为你有一个List 的整数。你说的这个“整数字符串”是什么?而“整数字符串”与是否将每个单个整数转换为字符串有什么关系?

标签: java list linked-list hashset


【解决方案1】:

一种方法是使用流:

Set<String> set = list.stream()
    .map(Object::toString)
    .collect(Collectors.toSet());

首先,您流式传输列表。然后,将每个元素转换为字符串,最后将所有元素收集到一个集合中。默认情况下,Collectors.toSet() 创建一个 HashSet,尽管规范不保证这一点。

如果您想要有保证的HashSet,您可以使用Collectors.toCollection(HashSet::new)

Set<String> set = list.stream()
    .map(Object::toString)
    .collect(Collectors.toCollection(HashSet::new));

【讨论】:

    【解决方案2】:

    使用 Java 8 流:

    set = list.stream().map(e -> e.toString()).collect(Collectors.toCollection(HashSet::new));
    

    DEMO

    或不使用流

    for(Integer i : list) set.add(Integer.toString(i));
    

    【讨论】:

      【解决方案3】:

      假设您使用 ArrayList 作为 List 的实例化形式:

          for (Integer value : list) {
              set.add(value.toString());
          }
      

      这将遍历您的 List 并获取每个整数,将其转换为字符串,然后将该值添加到您的 HashSet。

      【讨论】:

      • 我最终做了这样的事情。谢谢!
      • 没问题,如果这是您使用的答案,请随时将其标记为已回答。
      猜你喜欢
      • 2011-08-22
      • 2012-11-09
      • 2013-10-07
      • 1970-01-01
      • 2013-03-01
      • 2018-04-09
      • 2017-01-29
      • 1970-01-01
      • 2017-06-29
      相关资源
      最近更新 更多