現有的方法有兩種,名為getDetails(...). 一個需要至少一個強制引數,另一個需要一個集合(不驗證集合的內容/大小)。
問題是集合有時會作為空傳遞,根據我的業務案例,我總是希望傳遞至少一個值。所以,我需要制作private接受 Collections 的方法。
// 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);
}
呼叫者方法之一是將 Collection 物件傳遞給getDetails如下所示,
CustomerContext.getDetails(id.getDetails().values());
id.getDetails() 如下,
public Map<Id,Integer> getDetails(){
return Collections.unmodifiableMap(details);
}
我正在尋找一種將集合id.getDetails().values()轉換int[]為傳遞給getDetails(int id,int... ids)而不是呼叫的方法getDetails(Collection<Integer> idCollection)。
我可以將集合轉換Integer[]為如下,
(Integer[])id.getDetails().values().toArray()
我沒有找到將 Collection 轉換為int[].
任何建議都會有很大幫助。
我已經提到了一些現有的問題,但沒有成功解決我的問題:
將集合轉換為 int 陣列
將 java.util.Collections 轉換為整數陣列
uj5u.com熱心網友回復:
您不能轉換 Collection<Integer>為int[],但可以創建陣列:
int[] values = id.getDetails().values().stream()
.mapToInt(n -> n)
.toArray();
順便說一句......這段代碼:
if (!idCollection.contains(id)) {
idCollection.add(id);
}
可以改為:
idCollection.add(id);
因為idCollection是 a Set,這就是集合的作業方式。將其宣告為Collection;并不重要 它是一個Set.
uj5u.com熱心網友回復:
收集到整數 []
當您需要獲取型別的結果時Integer[],您必須在呼叫時提供一個函式作為引數toArray(),無需應用強制轉換(如果您不傳遞引數則 toArray() 回傳一個陣列 Object[])。
Integer[] arr = id.getDetails().values().toArray(Integer[]::new);
集合到 int[]
沒有辦法直接將Integer型別或陣列的集合轉換Integer[]為陣列int[]。簡單地通過強制轉換是不可能從另一個獲得的,這些型別是不兼容的。
您必須遍歷源并填充新創建的int[]陣列。它可以使用回圈“手動”完成,也可以使用流更方便的方式完成,整體方法不會改變。
這就是使用 Stream API 的方式:
int[] arr = id.getDetails().values().stream() // Stream<Integer> - stream of objects
.mapToInt(Integer::intValue) // IntStream - stream of primitives
.toArray();
uj5u.com熱心網友回復:
您可以使用流并將每個值映射到int中間mapInt操作。然后使用toArray()終端操作將每個值收集int到一個陣列int[]中。
Collection<Integer> c = new ArrayList(List.of(1, 2, 3, 4, 5));
int[] vet = c.stream().mapToInt(i -> i.intValue()).toArray();
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/490689.html
