I need to insert a key and an element, containing the key and another value (which will be selected in the end from the map sorted by keys) into an HashMap. I decided to lastly convert the HashMap to a TreeMap to sort it, but the HashMap gets filled with data that change at every insert:
here is the code
JavaScript
x
-
public class main {
public static void main(String[] args) throws FileNotFoundException {
Map<Integer, Element> map_football = new HashMap<>(); //map has key = string, value element_football
Map<Integer, Element> map_weather = new HashMap<>(); //map has key = int, value element_weather
Element element= new Element();
BufferedReader br = null;
String myFile="weather.dat";
//Wreader(map_weather,inputpath);
try {
File file = new File(myFile);
Scanner scanner = new Scanner(file);
scanner.nextLine(); //the first row is skipped
String fileContent = "";
while(scanner.hasNextLine()){ //reads the whole file
try{
Integer Dy=scanner.nextInt();
Integer MxT = scanner.nextInt();
Integer MnT = scanner.nextInt();
Integer exc=MxT-MnT;
element.setDy(Dy);
element.setExc(exc);
System.out.println(element.toString());
map_weather.put(exc, element);
map_weather.forEach((key, value) -> System.out.println(key + ":" + value));
System.out.println("New Cyclen");
scanner.nextLine();
}catch(InputMismatchException ex){
scanner.nextLine();
}
}
//now i got my map with key=Dy and value=Mxt-MnT
}
catch (Exception e) {
e.printStackTrace();
}
finally {
// Always close the BufferedReader
if (br != null) {
try {
br.close();
}
catch (Exception e) {
};
}
}
The output is something like this:
JavaScript
Element{Dy=1, exc=29}
29:Element{Dy=1, exc=29}
New Cycle
Element{Dy=2, exc=16}
16:Element{Dy=2, exc=16}
29:Element{Dy=2, exc=16}
New Cycle
Element{Dy=3, exc=22}
16:Element{Dy=3, exc=22}
22:Element{Dy=3, exc=22}
29:Element{Dy=3, exc=22}
New Cycle
Element{Dy=4, exc=18}
16:Element{Dy=4, exc=18}
18:Element{Dy=4, exc=18}
22:Element{Dy=4, exc=18}
29:Element{Dy=4, exc=18}
New Cycle
Advertisement
Answer
You need to create a new Element
for every put
. You can’t just reuse the same one.
Move
JavaScript
Element element= new Element();
into the while
loop.