这是Java上下文中的编程技术问题。
问题:我们有字符串键,它们都必须是唯一的。集合的实现是 Map 和 ArrayList 的组合,它允许将集合用作 Map 或 ArrayList(如果您好奇,可以使用 JFreeChart 的 DefaultPieDataset)。如果我们有一条数据,我们希望它是关键本身。如果我们有多个由其他键分隔的倍数,我们需要数据加上一个分隔符和一个递增的数字。
例如:
具有两个Bob
条目然后是 an 的数据Albert
将具有["Bob", "Albert"]
.
看起来像Albert
并且Bob
具有两个Bob
条目Albert
之间的数据将具有像["Bob : 1", "Albert", "Bob : 2"]
.
到目前为止,这是我们的代码:
String dataKey = "";
DefaultPieDataset ringDataset = new DefaultPieDataset();
for(String thisData: dataList)
{
int dataValue;
if(dataKey.equals(thisData))
{
dataValue= ringDataset.getValue(dataKey).intValue() + 1;
}else
{
dataKey= thisData;
if(ringDataset.getKeys().contains(dataKey) || ringDataset.getKeys().contains(dataKey+ " : 1")) //has this name been represented already?
{
if(ringDataset.getKeys().contains(dataKey)) //do we need to change the name to accommodate multiples?
{
int existingKeyIndex = ringDataset.getIndex(dataKey);
int existingKeyValue = ringDataset.getValue(dataKey).intValue();
ringDataset.remove(dataKey);
ringDataset.insertValue(existingKeyIndex, dataKey+ " : 1", existingKeyValue);
}
int counter = 2;
do{
dataKey= thisData + " : " + counter;
counter ++;
}while(ringDataset.getKeys().contains(dataKey)); //ensure that we are using a new key
}
dataValue= 1;
}
ringDataset.setValue(dataKey, dataValue);
}
目前,代码在每个重复项上都添加了“:#”,而不是Bob : 2
它Bob : 1 : 2
一个额外的挑战是我不能保证该名称不会有分隔符(示例中的冒号)。
此外,添加任何库都需要大量繁文缛节,因此需要一个仅 Java API 的解决方案。
感谢您帮助解决这个特别的脑筋急转弯,
亚当
编辑:为了进一步澄清代码,项目值基于数据类型连续出现的次数。所以在第一个例子中,键Bob
的值是 2 和Albert
1。在第二个例子中,所有键的值都是 1。