对于我输入到我的程序中的数据,我需要重复项,每个数据项的值,并且我要求按插入顺序将数据的迭代顺序作为默认值。
这是我正在使用的数据类型:
y = m * x + c
y = 8, m = 3, x = 2, c = 2
到目前为止,我一直在使用的是一个LinkedHashMap来存储我的所有数据,除了存储重复数据外,它还满足我的所有条件。
所以,如果我有 b + b = c ,我将无法让我的程序运行。
我希望继续使用映射作为键和值属性,以及如果数据即String,Integer存储不同种类的能力。所以我更喜欢使用linkedhashmap保留重复项的方法。如果没有,请告诉我是否有其他方式可以满足我的所有要求。
此致
答案 0 :(得分:1)
使用值为Object类型的Guava库Multimap。查看他们的documentation了解更多信息。
Multimap map = ArrayListMultimap.create();
map.put(key, value1);
map.put(key, value2);
List values = map.get(key);
答案 1 :(得分:1)
package com.shashi.mpoole;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.lang.reflect.Field;
import java.net.URISyntaxException;
public class LinearEquation {
public static void main(String[] args) throws URISyntaxException {
LinearEquation linearEquation = new LinearEquation();
InputStream in = LinearEquation.class.getResourceAsStream("../../../Inputs.txt");
// Inputs Taken
try {
// Reading Inputs
BufferedReader reader=new BufferedReader(new InputStreamReader(in));
String line=null;
// Separated by Comma m=4,x=2,c=5
while((line=reader.readLine())!=null){
LinearEqInput lei = new LinearEqInput();
String[] inputs = line.split(",");
//Getting array [m=4,x=2,c=5]
for (int i = 0; i < inputs.length; i++) {
String[] keyval = inputs[i].split("=");
//Getting vallue [m,4]
linearEquation.setValue(lei, keyval[0], keyval[1]);
}
System.out.print("[Inputs: m= " + lei.m + " x= " + lei.x + " ,c= " + lei.c + "]");
//result
System.out.println(" Output :" + linearEquation.calculate(lei));
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// This method use reflection to store the value of a field in the class LinearEqInput
public void setValue(LinearEqInput lei,String fieldName, String value) throws SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException
{
Field f = lei.getClass().getDeclaredField(fieldName);
f.setDouble(lei, Double.parseDouble(value));
}
//Calculating the Y
public double calculate(LinearEqInput lei)
{
return lei.m*lei.x + lei.c;
}
}
class LinearEqInput
{
//Inputs
double m,x,c = 0;
}
输入文件
m=4,x=3,c=1
m=4,x=4,c=6
m=4,x=5,c=5
m=4,x=7,c=4
m=4,x=2,c=3
m=4,x=5,c=2
输出:
[Inputs: m= 4.0 x= 3.0 ,c= 1.0] Output :13.0
[Inputs: m= 4.0 x= 4.0 ,c= 6.0] Output :22.0
[Inputs: m= 4.0 x= 5.0 ,c= 5.0] Output :25.0
[Inputs: m= 4.0 x= 7.0 ,c= 4.0] Output :32.0
[Inputs: m= 4.0 x= 2.0 ,c= 3.0] Output :11.0
[Inputs: m= 4.0 x= 5.0 ,c= 2.0] Output :22.0
答案 2 :(得分:1)
您可以使用Map<Integer,List<Integer>>
。在此数据类型中,您可以为同一个键存储多个值。您的put方法可以是这样的......
public void put(Integer key,Integer val){
List<Integer> arr = map.get(key);
if(arr == null){
arr = new ArrayList<Integer>();
map.put(key,arr);
}
arr.add(val);
}