Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Jak zapisywać HashMapy


Gorgi123

Rekomendowane odpowiedzi

Opublikowano

Witam mam np taki tam evencik

@EventHandler

public void onJoin(PlayerJoinEvent e){

if(!(e.getPlayer().hasPlayedBefore()))

join.put(e.getPlayer().getName(), 0);

else{

join.put(e.getPlayer().getName(), join.get(e.getPlayer().getName())+1);

}

}

join to hashmapa

 

i jak teraz taką hashmape zapisać

najlepiej prosiłbym o 2 różne sposoby 1 z mysql a drugi jakiś wymyślony przez was

Opublikowano

Rozumiem, że z samą Mapą nie masz problemu? Jeśli chodzi o pluginy to najpopularniejszy sposób poza SQL to YAML.

Do bazy danych to wiadomo, dodajemy nowe rekordy używając najlepiej UUID gracza i dajemy odpowiednie wartości, czyli po prostu join.get(uuid). Polecam prepared statements.

Bukkit daje nam API do konfiguracji w formacie YAML, zasada działania podobna, tworzysz konfigurację, tworzysz sekcję np. taką jak uuid gracza, wpisujesz jej wartości do odpowiednich kluczy. Potem myk do pliku ;)

Dodaj mój nick do posta jeśli potrzebujesz pomocy | Piszę pluginy na zlecenie | Pomagam z Linuxem

newlogo.png

Opublikowano

ale ja chce zrobić żeby robiło tak mam hashmape i przy kazdym wchodzeniu dodawało ten 1 punkcik i żeby ta hashmapa zapisywała się przy wyłączeniu serwera i potem ją pobierało i za nic nie wiem jak to zapisać bo takie zapisywanie za każdym razem to potrafię zrobić 

chodzi mi bardziej o zapisywanie całej hashmapy i ponowne jej ładowanie do pamięci serwera

Opublikowano

Odnieś się jakoś do mojej poprzedniej wiadomości, bo nie wiem, mam ją skopiować i wkleić jeszcze raz?

Dodaj mój nick do posta jeśli potrzebujesz pomocy | Piszę pluginy na zlecenie | Pomagam z Linuxem

newlogo.png

Opublikowano

hmm

a może tak?

HashMap<K,V> m = new HashMap<>();

getConfig().addDefault("KEY", m);

a potem

            for(Object obj : m.keySet()){
                UUID uid = UUID.fromString((String) obj);
                long abc = (Integer) m.get(obj);
            }
i w pętli dodajesz do hashmapy 
może być literówka gdzieś bo na telefonie pisane :D 

Co ja tutaj robie...

Opublikowano

Typem powinno być Map<K, V> a nie HashMap! #hejt

Raczej takich rzeczy nie zapisuje się w configu. Powinno się unikać mieszania danych z configiem. Jeśli jest ich dużo, to najlepiej w osobnych plikach, żeby uniknąć nadpisywania dużych plików kiedy nie trzeba.

Kolega OP jak ruszy głową to sobie poradzi na podstawie mojego pierwszego posta, ale mniej więcej o to chodzi @dekros123

Dodaj mój nick do posta jeśli potrzebujesz pomocy | Piszę pluginy na zlecenie | Pomagam z Linuxem

newlogo.png

Opublikowano

Witam mam np taki tam evencik

@EventHandler

public void onJoin(PlayerJoinEvent e){

if(!(e.getPlayer().hasPlayedBefore()))

join.put(e.getPlayer().getName(), 0);

else{

join.put(e.getPlayer().getName(), join.get(e.getPlayer().getName())+1);

}

}

join to hashmapa

 

i jak teraz taką hashmape zapisać

najlepiej prosiłbym o 2 różne sposoby 1 z mysql a drugi jakiś wymyślony przez was

taka rada, zamiast takiego brzydkiego kodu:

if(!(e.getPlayer().hasPlayedBefore()))
join.put(e.getPlayer().getName(), 0);
else{
join.put(e.getPlayer().getName(), join.get(e.getPlayer().getName())+1);
}

o ile nie masz javy ze średniowiecza, możesz napisać tak:

join.compute(e.getPlayer().getName(), (name, v) -> (v == null) ? 0 : (v + 1));

co zadziała identycznie, za to jest szybsze, ładniejsze, itd.

Jak wartości nie ma w mapie - doda ją, jak jest, to zwiększy o 1.

Dla fanów Opcjonal można też tak:

join.compute(e.getPlayer().getName(), (name, v) -> Optional.ofNullable(v).map(i -> i + 1).orElse(0));

Taka tylko uwaga :D resztę już ci wyjaśnili.

1438614356923701010629.png

 

Opublikowano

Goto jak on tu przyjdzie i będzie pytał to masz wrócić i mu te lambdy tłumaczyć, bo ja nie mam zamiaru, bo to jak grochem o ścianę

Dodaj mój nick do posta jeśli potrzebujesz pomocy | Piszę pluginy na zlecenie | Pomagam z Linuxem

newlogo.png

Opublikowano

 

Witam mam np taki tam evencik

@EventHandler

public void onJoin(PlayerJoinEvent e){

if(!(e.getPlayer().hasPlayedBefore()))

join.put(e.getPlayer().getName(), 0);

else{

join.put(e.getPlayer().getName(), join.get(e.getPlayer().getName())+1);

}

}

join to hashmapa

 

i jak teraz taką hashmape zapisać

najlepiej prosiłbym o 2 różne sposoby 1 z mysql a drugi jakiś wymyślony przez was

taka rada, zamiast takiego brzydkiego kodu:

if(!(e.getPlayer().hasPlayedBefore()))
join.put(e.getPlayer().getName(), 0);
else{
join.put(e.getPlayer().getName(), join.get(e.getPlayer().getName())+1);
}

o ile nie masz javy ze średniowiecza, możesz napisać tak:

join.compute(e.getPlayer().getName(), (name, v) -> (v == null) ? 0 : (v + 1));

co zadziała identycznie, za to jest szybsze, ładniejsze, itd.

Jak wartości nie ma w mapie - doda ją, jak jest, to zwiększy o 1.

Dla fanów Opcjonal można też tak:

join.compute(e.getPlayer().getName(), (name, v) -> Optional.ofNullable(v).map(i -> i + 1).orElse(0));

Taka tylko uwaga :D resztę już ci wyjaśnili.

 

a jeśli wie jak uzywąc lambd może zrobić

        join.put(e.getPlayer().getName(),join.containsKey(e.getPlayer().getName()) ? join.get(e.getPlayer().getName()) + 1 : 1);

nw czy wolniejsze od lambd, może ale tak samo krótkie i ładne :D

Co ja tutaj robie...

Opublikowano

 

 

Witam mam np taki tam evencik

@EventHandler

public void onJoin(PlayerJoinEvent e){

if(!(e.getPlayer().hasPlayedBefore()))

join.put(e.getPlayer().getName(), 0);

else{

join.put(e.getPlayer().getName(), join.get(e.getPlayer().getName())+1);

}

}

join to hashmapa

 

i jak teraz taką hashmape zapisać

najlepiej prosiłbym o 2 różne sposoby 1 z mysql a drugi jakiś wymyślony przez was

taka rada, zamiast takiego brzydkiego kodu:

if(!(e.getPlayer().hasPlayedBefore()))
join.put(e.getPlayer().getName(), 0);
else{
join.put(e.getPlayer().getName(), join.get(e.getPlayer().getName())+1);
}

o ile nie masz javy ze średniowiecza, możesz napisać tak:

join.compute(e.getPlayer().getName(), (name, v) -> (v == null) ? 0 : (v + 1));

co zadziała identycznie, za to jest szybsze, ładniejsze, itd.

Jak wartości nie ma w mapie - doda ją, jak jest, to zwiększy o 1.

Dla fanów Opcjonal można też tak:

join.compute(e.getPlayer().getName(), (name, v) -> Optional.ofNullable(v).map(i -> i + 1).orElse(0));

Taka tylko uwaga :D resztę już ci wyjaśnili.

 

a jeśli wie jak uzywąc lambd może zrobić

        join.put(e.getPlayer().getName(),join.containsKey(e.getPlayer().getName()) ? join.get(e.getPlayer().getName()) + 1 : 1);

nw czy wolniejsze od lambd, może ale tak samo krótkie i ładne :D

 

ani trochę nie ładne, masz tylko gigantyczny łańcuszek, co chwilę e.getPlayer.getName, i kod jest taki sam jak jego tylko wcisnięty na siłę do jednej linijki, compute to znacznie sprytniejsza zabawka, i wydajniejsza dzięki temu, bo nie musi sprawdzać czy entry istnieje kilka razy, aż 3 razy w twoim kodzie trzeba przeszukiwać mapkę, do .put, do .contains i do .get, gdzie compute robi to... raz.

1438614356923701010629.png

 

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...