gpt4 book ai didi

java - Java中用于保存存储桶列表ID的默认结构

转载 作者:太空宇宙 更新时间:2023-11-04 10:12:55 24 4
gpt4 key购买 nike

我有以下代码

Map<Integer,int[]> mapa = new HashMap<Integer,int[]>();     
int[][] idBlocoRef = {
{20,0,4,5,9,11,14},
{2,3,7,8,17},
{3,1,2,6,15,18,19}
};
for (int i = 0; i < idBlocoRef.length; i++) {
mapa.put(i,idBlocoRef[i]);
}
int[] aux;
for (int chave : mapa.keySet()) {
aux = mapa.get(chave);
System.out.println("Bloco "+(chave+1)+" tem os valores");
for (int i = 0; i < aux.length; i++) {
System.out.print(aux[i]+",");
}
System.out.println();
}


我想要的是在我的int数组中传递一个值,并接收他所在的“存储桶”。示例:存储桶2中的ID 2,存储桶1中的ID 11,存储桶3中的ID 15 ...

我尝试使用HashMap这样做,但无法正常工作。 Java中有什么自然结构可以为我做到这一点?

最佳答案

int[]List<Integer>用作Map值并不重要,因为您将这些值视为只读,但是,通常建议使用List<Integer>,因为它提供了许多方法并且易于输入到Stream。 (不要忘记键Integer0开始。)

Map<Integer, List<Integer>> map = new HashMap<>();  

for (int i = 0; i < idBlocoRef.length; i++) {
map.put(i, Arrays.stream(idBlocoRef[i]).boxed().collect(Collectors.toList()));
}


好吧, Set<Integer>会更好,因为它不允许重复的值,并且据我所知,它适合您的用例(基于注释)。我看到您在2个“存储桶”中有ID 23-我认为是错别字,否则,如果ID位于多个“存储桶”中,则必须定义行为。回到ID的唯一性:

Map<Integer, Set<Integer>> map = new HashMap<>();  

for (int i = 0; i < idBlocoRef.length; i++) {
map.put(i, Arrays.stream(idBlocoRef[i]).boxed().collect(Collectors.toSet()));
}


现在让我们在存储桶中找到 int idToFind = 3并返回它的密钥:

for (Entry<Integer, Set<Integer>> entry: map.entrySet()) {
if (entry.getValue().contains(idToFind)) {
System.out.println("The " + idToFind + " is in the bucket no. " + entry.getKey());
break;
}
}


如果您更喜欢Stream-API:

map.entrySet()
.stream()
.filter(e -> e.getValue().contains(idToFind))
.findFirst()
.ifPresent(e -> System.out.println("The " + idToFind + " is in the bucket no. " + e.getKey()));

关于java - Java中用于保存存储桶列表ID的默认结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52105387/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com