【问题标题】:Add values from basic array to Set<String>将基本数组中的值添加到 Set<String>
【发布时间】:2019-02-13 06:24:50
【问题描述】:
  private Set<String> fields = new HashSet<>();

  public void fields(String... s){
    this.fields.addAll(s);
  }

不编译,说:

addAll
(java.util.Collection<? extends java.lang.String>)
in Set cannot be applied
to
(java.lang.String[])

有什么好办法解决这个问题吗?

【问题讨论】:

  • addAll 接受一个集合,而不是一个数组。试试this.fields.addAll(Arrays.asList(s))
  • s varargs的数据类型是字符串数组,你想把它收集到hashset中。这就是您看到异常的原因。

标签: java collections set


【解决方案1】:

我认为您可以先将数组转换为列表。也许像

this.fields.addAll(Arrays.asList(s));

【讨论】:

    【解决方案2】:

    如果您不想再修改Set,可以将Set.of 与Java-9+ 一起使用:

    public void fields(String... s) {
        this.fields = Set.of(s);
    }
    

    否则你可以使用Collections.addAll

    public void fields(String... s) {
        Collections.addAll(fields, s);
    }
    

    【讨论】:

      【解决方案3】:

      您只需将array 转换为Set,如下代码所示。

      String [] array = new String[] {"one","two","three","four","five"};
      Set<String> set = new HashSet<String>(Arrays.asList(array));
      

      【讨论】:

        【解决方案4】:

        如果你可以使用 google Guava,下面的代码可能会对你有所帮助

        public void fields(String... s) {
            this.fields.addAll(Sets.newHashSet(s));
        }
        

        另一种方法:

        public void fields1(String... s) {
            Sets.union(fields,Sets.newHashSet(s)).copyInto(fields);
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-09-17
          • 1970-01-01
          • 2012-12-26
          • 2021-04-28
          • 2012-10-04
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多