Strumień do Guava Multimap

Strumień do Guava Multimap
KA
KA
  • Rejestracja:prawie 12 lat
  • Ostatnio:prawie 5 lat
  • Lokalizacja:Warszawa
  • Postów:1683
0

Hejka. Tak sobie wpadłam na Google Guava - czemu nie udostępniają żadnego Collectorsa abym mogła użyć .collect() i "zakumulować" strumień w Multimap ?
Szukałam w internecie i nic nie ma. Póki co mam foreach a już wiem, że to średnie rozwiązanie w związku z tym pytam -> czy da się lepiej ;?

Kopiuj
import com.google.common.collect.HashMultimap;
import com.google.common.collect.Multimap;

import java.util.Arrays;
import java.util.List;

public class MainApp {
    public static void main(String[] args) {

        Multimap<String, String> multimap = HashMultimap.create();
        List<String> lines = Arrays.asList(
                "zwierze=kot",
                "samochod=mercedes",
                "zwierze=wydra",
                "system=linux",
                "samochod=volvo",
                "zwierze=kot"
        );

        lines.stream().forEach(l -> multimap.put(l.split("=")[0], l.split("=")[1]));
        System.out.println(multimap);
    }
}


PROGRAMY NA ZAMÓWIENIE, ZALICZENIA STUDENCKIE, KONFIGURACJA SERWERÓW, SYSTEMÓW I BAZ DANYCH, STRONY INTERNETOWE, POMOC W PROGRAMOWANIU, POPRAWIENIE I OPTYMALIZACJA APLIKACJI
JAVA, C++, LINUX, WWW, SQL, PYTHON
POSIADAM KOMERCYJNE DOŚWIADCZENIE
TANIO, SZYBKO I PORZĄDNIE
Z KOMENTARZAMI OBJAŚNIAJĄCYMI KOD
PISZ NA PRYWATNĄ WIADOMOŚĆ
CENY JUŻ OD 49,99ZŁ ZA PROGRAM
ZAJMIJ SIĘ TYM CO CIĘ NAPRAWDĘ INTERESUJE!
Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
0

Guava z tego co pamiętam nie miała nigdy "reduce" w swojej implementacji.
Tylko czemu nie używasz javy 8?


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
KA
KA
  • Rejestracja:prawie 12 lat
  • Ostatnio:prawie 5 lat
  • Lokalizacja:Warszawa
  • Postów:1683
0

@Shalom używam Javy8. Da się inaczej skonstruować taki silnik korzystając z Javy8 a nie z Multimap od Guava?


PROGRAMY NA ZAMÓWIENIE, ZALICZENIA STUDENCKIE, KONFIGURACJA SERWERÓW, SYSTEMÓW I BAZ DANYCH, STRONY INTERNETOWE, POMOC W PROGRAMOWANIU, POPRAWIENIE I OPTYMALIZACJA APLIKACJI
JAVA, C++, LINUX, WWW, SQL, PYTHON
POSIADAM KOMERCYJNE DOŚWIADCZENIE
TANIO, SZYBKO I PORZĄDNIE
Z KOMENTARZAMI OBJAŚNIAJĄCYMI KOD
PISZ NA PRYWATNĄ WIADOMOŚĆ
CENY JUŻ OD 49,99ZŁ ZA PROGRAM
ZAJMIJ SIĘ TYM CO CIĘ NAPRAWDĘ INTERESUJE!
Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
1
  1. http://stackoverflow.com/questions/23003542/cleanest-way-to-create-a-guava-multimap-from-a-java8-stream
  2. Albo rób collect do Map<String, Set<String>> bo przecież do tego się ta twoja multimapa sprowadzi.

"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
KA
KA
  • Rejestracja:prawie 12 lat
  • Ostatnio:prawie 5 lat
  • Lokalizacja:Warszawa
  • Postów:1683
0

Dobra pomyślę nad tym collectorem z SO. Odnośnie Map<String,Set<String>> owszem, ale nie potrafię już tak łatwo, ładnie tego zmapować.


PROGRAMY NA ZAMÓWIENIE, ZALICZENIA STUDENCKIE, KONFIGURACJA SERWERÓW, SYSTEMÓW I BAZ DANYCH, STRONY INTERNETOWE, POMOC W PROGRAMOWANIU, POPRAWIENIE I OPTYMALIZACJA APLIKACJI
JAVA, C++, LINUX, WWW, SQL, PYTHON
POSIADAM KOMERCYJNE DOŚWIADCZENIE
TANIO, SZYBKO I PORZĄDNIE
Z KOMENTARZAMI OBJAŚNIAJĄCYMI KOD
PISZ NA PRYWATNĄ WIADOMOŚĆ
CENY JUŻ OD 49,99ZŁ ZA PROGRAM
ZAJMIJ SIĘ TYM CO CIĘ NAPRAWDĘ INTERESUJE!
Wibowit
  • Rejestracja:około 20 lat
  • Ostatnio:około 15 godzin
2

http://www.tryjava8.com/app/snippets/54037e93e4b02cbbc2b12461

Kopiuj
import java.util.*;
import java.util.stream.*;
 
public class MainApp {
    public static void main(String[] args) {
        List<String> lines = Arrays.asList(
                "zwierze=kot",
                "samochod=mercedes",
                "zwierze=wydra",
                "system=linux",
                "samochod=volvo",
                "zwierze=kot"
        );
        Map<String, Set<String>> multimap = lines.stream().collect(
          Collectors.toMap(v -> v.split("=")[0], 
                           v -> Collections.singleton(v.split("=")[1]),
                           (a, b) -> {
                             if (a.size() == 1) {
                               Set<String> c = new HashSet<>();
                               c.addAll(a);
                               c.addAll(b);
                               return c;
                             } else {
                               a.addAll(b);
                               return a;
                             }
                           }));
        
        System.out.println(multimap);
    }
}

{system=[linux], samochod=[mercedes, volvo], zwierze=[kot, wydra]}


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
edytowany 1x, ostatnio: Wibowit
Shalom
A nie da się czasem bez tego ifa?
Wibowit
da się :] można od razu tworzyć hashsety
KA
Dzięki

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.