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
- 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:
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
Element element= new Element();
into the while
loop.