ArrayList to Map przed Java8

0

Cześć, jak można przekonwertować ArrayList na Map nie korzystając z Javy8 ? szukałem na necie, ale nie potrafie tego rozwiazać. Znalazłem że można uzyć:
https://sourceforge.net/projects/streamsupport/ , ale nie potrafie z tego korzystać, może ktoś podpowie jak to użyć?
W Javie8 robie to tak:

myMap = scanedBarcodes.stream().collect(Collectors.groupingBy(e->e.getScanedBarcodes().toString(), Collectors.counting()));

Ale można to uzyć w aplikacjach Androida od Api24 , a ja potrzebuje od Api22.

Można niby tak https://www.baeldung.com/java-list-to-map
ale ja mam tylko jedno pole String w klasie, nie mam żadnego Id i chce żeby mi zliczało te Stringi jeśli się powtarzają.

2

nie moge wkleic linku, łap

import java.util.*;
import java.lang.*;
import java.io.*;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
 
 
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
	public static void main (String[] args) throws java.lang.Exception
	{
 
        List<String> list = new LinkedList<>();
        list.add("Bartek");
        list.add("Adam");
        list.add("Ewa");
        list.add("Ewa");
 
        Map<String, Integer> map = new HashMap<>();
 
        for (String s : list) {
            Integer item = map.get(s);
            map.put(s, item == null ? 1 : item + 1);
        }
 
        for (Entry<String, Integer> entry : map.entrySet()) {
            System.out.println(entry.getKey() + " -> " + entry.getValue());
        }
	}
}
4

cos w stylu

HashMap<String,Integer> map = new HashMap<String,Integer>();
for(Barcode e : scanedBarcodes) {
    String code = e.getScanedBarcodes().toString();
    Integer count = map.get(code);
    map.put(code, count == null ? 1 : count + 1);
}
0

Dzieki wielkie:)

0

Przy okazji mam jeszcze małe pytanie, wypisujać elementy Mapy do pola tekstowego :

for (String entry : myMap.keySet()){
            Integer value = myMap.get(entry);
            tvScanedBarcodesInMemory.append(entry + " : " + value + "\n");
        }

lub

for (Map.Entry<String, Integer> entry : myMap.entrySet()) {
            tvScanedBarcodesInMemory.append(entry.getKey() + " : " + entry.getValue() + "\n");
      }

wypisuje mi w polu tekstowym:
test : 6
open : 3
: 9

Rozumiem że to ": 9" jest suma ile obiektów jest w Mapie, ale czy musi mi to wypisywać? mozna jakoś to ominąć??

Dodam tylko, że gdy używam Javy8 konwersji ArrayList na Map, to wszystko wypisuje poprawnie, bez tej sumy obiektów.

myMap = scanedBarcodes.stream().collect(Collectors.groupingBy(e->e.getScanedBarcodes().toString(), Collectors.counting()));
0

jakaś rada co może być przyczyną, że wypisuje mi sume wszystkich obiektów?

1

A nie dodajesz tego dodatkowego wpisu z pustym kluczem przy tworzeniu mapy?

0
katelx napisał(a):

cos w stylu

HashMap<String,Integer> map = new HashMap<String,Integer>();
for(Barcode e : scanedBarcodes) {
    String code = e.getScanedBarcodes().toString();
    Integer count = map.get(code);
    map.put(code, count == null ? 1 : count + 1);
}
katelx napisał(a):

robienie if(... == null) ... w javie i twierdzenie ze to na to samo wychodzi co optional to jeden z objawow zacofania programistycznego, dodatkowy bonus - motywowanie tego dbaloscia o wydajnosc ;)

0
katelx napisał(a):

cos w stylu

HashMap<String,Integer> map = new HashMap<String,Integer>();
for(Barcode e : scanedBarcodes) {
    String code = e.getScanedBarcodes().toString();
    Integer count = map.get(code);
    map.put(code, count == null ? 1 : count + 1);
}

Mi by jakoś bardziej pasowało bez tego przyrównywania do nulla

map.put(code, map.containsKey(code) ? 1 : map.get(code) + 1);

ale w sumie tak się ta linia komplikuje trochę, więc nie wiem czy to lepiej

0

Mi by jakoś bardziej pasowało bez tego przyrównywania do nulla

map.put(code, map.containsKey(code) ? 1 : map.get(code) + 1);

ale w sumie tak się ta linia komplikuje trochę, więc nie wiem czy to lepiej

brzydkie bo lookup sie dwa razy robi ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1