Java, lista bez powtórzeń

0

Siema mam problem , otóż mam zrobić listę elementów z 2 tablic np: tab1:{1,2,3,4,5,6,7} i tab2:{3,4,5,8}. mam zrobić to na liście i wypisać bez powtórzeń ile jest powtórzeń wszystkich elementów (1 - 1 , 2 - 1, 3 - 2, 4 -2 itd). Mam w zadaniu użyć takich funkcji jak :

Lista <Integer> nazwa = new ArrayList<>()
nazwa.add(element)
nazwa.contains(element)

póki co napisane mam taki kod do wstawiania listy:

 public void zapis2(Tablica u){
  
          ArrayList <Integer> nazwa = new ArrayList<>(); 
          
          for(int i=0;i<m;i++)
          {
              nazwa.add(tab[i]);
          }
          for(int j=0;j<n;j++)
          {
              nazwa.add(tab[j]);
          }
          
          for(int i:nazwa)
          {
              if(nazwa.contains(i))
                  
          }
          

Proszę o pomoc :)

1

Pomijając, że coraz więcej jest tu postów typu: mam problem, tutaj wstawiam kod (który jest równy 10% rozwiązania), to co to znaczy mam użyć? Taką dostałeś wskazówkę, że tymi funkcjami możesz tego dokonać, czy musisz ich użyć obowiązkowo?

int tab1[] = {1,2,3,4,5,6,7} ;
int tab2[] = {3,4,5,8};
		
List<Integer> firstList = Arrays.stream(tab1).boxed().collect(Collectors.toList());
List<Integer> secondList = Arrays.stream(tab2).boxed().collect(Collectors.toList());
		
firstList.addAll(secondList);
Map<Integer, Long> counts = firstList.stream().collect(Collectors.groupingBy(Function.identity() , Collectors.counting()));

Tworzenie firstList oraz secondList możesz pominąć jeśli tego nie rozumiesz i wykorzystać add(), mniej więcej jak w tym urywku kodu z Twojego posta.

Mapa counts jest tym czego potrzebujesz, każdej liczbie z twoich tablic jest przypisana jej liczebność.

1
Szymon Chmielewski napisał(a):

Mogę użyć , lecz nie mam pojęcia jak zrobić to na 2 pętlach

Prawie już tego dokonałeś.
Przechodzisz forem po pierwszej tablicy (upewnij się co do nazwy tablicy oraz warunku w forze, aby indeks był mniejszy od wielkości tablicy).
Przechodząc, pobierasz wartość i wrzucasz ją do listy, w Twoim wypadku nazwa.

To samo robisz dla drugiej tablicy.

Gdy już będziesz miał listę nazwa z elemnetami z pierwszej i drugiej tablicy, przeanalizuj mój kod z mapą, który wykonuje zliczanie elementów.

0

użyłem podanej funkcji przez @kixe52

firstList.addAll(secondList);
Map<Integer, Long> counts = firstList.stream().collect(Collectors.groupingBy(Function.identity() , Collectors.counting()));

Lecz zrobiłem to na jednej liście. Podobnie jak mi proponował użyłem "add" gdyż powyższa metoda jest mi jeszcze nieznana, lecz wiedziałem do czego ona prowadzi.

Mój kod wygląda następująco:

List <Integer> nazwa = new ArrayList<>();

for(int i=0;i<m;i++)
{
    nazwa.add(tab[i]);
}
for(int i=0;i<n;i++)
{
    nazwa.add(u.tab[i]);
}

Map <Integer, Long> counts = nazwa.stream().collect(Collectors.groupingBy(Function.identity() , Collectors.counting()));
System.out.println(counts);

Z góry dziękuje za pomoc i wyrozumiałość :)

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