当前位置: 首页 > 知识库问答 >
问题:

将集合转换为int[]数组

卜泓
2023-03-14

现有两个名为getDetails(…)的方法 。一个需要至少一个必需参数,另一个需要一个集合(不验证集合的内容/大小)。

问题是集合有时会作为空传递,并且根据我的业务案例,我总是期望至少传递一个值。因此,我需要将该方法设为私有,它接受集合。

//There are two params, to make sure that at-least one is passed by the caller

public static CustomerContext getDetails(int id,int... ids){ 
   Collection<Integer> idCollection = Instream.of(ids).boxed().collect(Collectors.toSet());
   if(!idCollection.contains(id)){
           idCollection.add(id);
     }
   return getDetails(idCollection);
}

我计划将下面的方法作用域设置为private,这样调用者就不会使用零属性调用此方法。

public static CustomerContext getDetails(Collection<Integer> idCollection){
 return getDetails(idCollection,false);
}

调用方方法之一是将集合对象传递给下面的getDetails,

CustomerContext.getDetails(id.getDetails().values());

id.getDetails()如下所示,

public Map<Id,Integer> getDetails(){
return Collections.unmodifiableMap(details);
}

我正在寻找一种方法来转换的集合id.get详细信息().值()int[]传递给get细节(int id, int... id)而不是调用get细节(集合

我可以将集合强制转换为整数[],如下所示,

(Integer[])id.getDetails().values().toArray()

我没有找到将集合强制转换为int[]的方法。

任何建议都会大有裨益。

我已经提到了一些现有的问题,但没有成功解决我的问题:

集合到int数组的转换

转换java。util。集合到整数数组


共有3个答案

黄彬
2023-03-14
匿名用户

当需要获得类型为整型[]的结果时,在调用toArray()时必须提供一个函数作为参数,无需应用强制转换(如果未传递参数,则返回一个数组对象[])。

Integer[] arr = id.getDetails().values().toArray(Integer[]::new);

没有将整数的集合或数组直接转换为整数。仅仅通过铸造是不可能从另一个获得一个的。

您必须遍历源代码并填充新创建的int[]数组。它可以通过使用循环“手动”完成,或者以更方便的方式使用流,整体方法不会改变。

这就是如何使用流API完成的:

int[] arr = id.getDetails().values().stream() // Stream<Integer> - stream of objects
    .mapToInt(Integer::intValue) // IntStream - stream of primitives
    .toArray();

冯庆
2023-03-14

无法强制转换集合

int[] values = id.getDetails().values().stream()
  .mapToInt(n -> n)
  .toArray();

旁白。。。此代码:

if (!idCollection.contains(id)) {
    idCollection.add(id);
}

可更改为:

idCollection.add(id);

因为idCollection是一个集合,集合就是这样工作的。它被声明为集合并不重要;这是一个集。

翟理
2023-03-14

您可以使用流并使用mid操作将每个值映射到int。然后使用toArray()终端操作将每个int值收集到一个数组中。

Collection<Integer> c = new ArrayList(List.of(1, 2, 3, 4, 5));
int[] vet = c.stream().mapToInt(i -> i.intValue()).toArray();
 类似资料:
  • 我想显示一个图形,为了显示它,我需要整数值。我从我的代码中得到这个 有没有什么方法可以让我以这样一种方式转换集合以获得整数值?我在打印集合c时得到这个

  • 我想在Scala中映射Java数组。对于普通的Java集合,我知道我可以使用 但是,对于阵列,此转换不起作用: 那么,如何将Java数组转换为Scala集合、iterable或可以映射的对象呢?

  • Set似乎是一种创建具有保证唯一元素的数组的好方法,但它不提供任何获取属性的好方法,除了generator[Set].values,它以的尴尬方式调用。 如果您可以在集合上调用和类似的函数,那么这是可以的。但你也不能那样做。 我尝试过,但似乎只转换了类数组(NodeList和TypedArrays?)对象设置为数组。再试一次:对Sets不起作用,set.prototype没有类似的静态方法。 那么

  • 运行代码时,出现以下错误: 导致的代码是: 但当我这样做时: 我得到以下输出: [1,7,15] 我不明白为什么我不能将其转换为整数[]。有什么建议吗?

  • 问题内容: 问题 与新HashSet(Collection)等效的Scala)相关,如何将Java集合(例如)转换为Scala集合? 我实际上是在尝试将Java API调用转换为Spring的 (返回a )成Scala不可变。因此,例如: 这似乎有效。欢迎批评! 问题答案: 您的最后一条建议有效,但您也可以避免使用: 请注意,默认情况下,由于提供了此功能。

  • 我知道scala.collection包中有两个极其有用的对象,可以帮助我们实现这个目标: JavaConverters(如果我想明确地说出我想要转换的内容) JavaConversions(如果我不想共同控制转换,让编译器为我做隐式工作) 但是在我的案例中应用它们有一些困难,因为我的数据结构比我在许多示例中看到的其他数据结构要复杂一点。 我在scala代码中,我希望我的scala函数返回一个Ja