• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Java - ArrayList - Czy da się wyświetlić część listy?

Object Storage Arubacloud
+1 głos
539 wizyt
pytanie zadane 26 kwietnia 2022 w Java przez Czang Kai Shrek Obywatel (1,990 p.)

Witam, mam listę wypełnioną obiektami typu Slowo - (string,integer) (słowo i ilość jego wystąpień w pliku txt), posortowaną i ustawioną od najw do najm. integerów:

ArrayList<Slowo> listaSlow = new ArrayList<>();
for (String wyraz : slownik.keySet()) {
    Slowo item1 = new Slowo(wyraz,slownik.get(wyraz));
    listaSlow.add(item1);
}
//posortowac liste
Collections.sort(listaSlow);
System.out.println(listaSlow);

i teraz chcę wyświetlić z niej 20 najczęstszych słów czyli: 20, pierwszych rekordów listy.
Pytanie: Czy da się wyświetlić część listy?
Myślałem by po niej przelecieć pętlą z licznikiem, ale nie wiem jak wyświetlić poszczególne elementy:

int licznik=0;
//wyswietlic liste 20/30 najpopularniejszych slow
Collections.reverse(listaSlow);
//System.out.println(listaSlow);
for (String wyraz : slownik.keySet()) {
    if(licznik<=20) {
        //Slowo item2 = new Slowo(wyraz, slownik.get(wyraz));
        //listaSlow.add(item2);
    }
    licznik++;
}

 

1 odpowiedź

+2 głosów
odpowiedź 26 kwietnia 2022 przez Wiciorny Ekspert (270,110 p.)
wybrane 28 kwietnia 2022 przez Czang Kai Shrek
 
Najlepsza

Bardziej efficient rozwiazanie jesli chcesz tylko wypisac 20 pierwszych to stream: 

 Arrays.stream(listaSlow).limit(20).forEach(System.out::print); // albo jak chcesz niemutowalne

albo jak chcesz niemutowalne Stream.of(array)....
Swoja droga można po prostu iterować po elementach tablicy ( tylko 20stu). Możesz jak napisałeś PRZELECIEĆ petlą po niej, ale aktualnie nie lecisz po niej, a po słowniku... Dlaczego iterujesz pętla for po SŁOWNIKU a nie po już posortowanej by rewers liścieSłow ?

for (String wyraz : listaSlow) {
  .... teraz próbuj wyświtlić sobie warunkami 
}

Jescze możesz skorzystać z iteratora  https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html

1
komentarz 26 kwietnia 2022 przez Wiciorny Ekspert (270,110 p.)

jeszcze istotna sprawa Array.stream tworzy Ci strumień z elementów tablicy, natomiast... Stream.of tworzy ci strumień w którym jest cała tablica 

public static <T> Stream<T> stream(T[] array)

vs

static <T> Stream<T>	of(T t)

 

komentarz 27 kwietnia 2022 przez Czang Kai Shrek Obywatel (1,990 p.)

@Wiciorny, Już krok bliżej do sukcesu! Ale dalej coś jest nie tak...
Arrays.stream nie kompiluje się przez Array..  Stream.of chyba prędzej tylko mimo ustalonego limitu dalej wyświetla się całość listaSlow, a w pętli, przeleciałem przez listaslow xd, ale trochę nie wiem jak odnieść się do danego ELEMENTU listaSlow, a nie do całej listy:
 

int licznik=0; int userLimit=20;
        //wyswietlic liste 20/30 najpopularniejszych slow
        Collections.reverse(listaSlow);
        //System.out.println(listaSlow);
        Stream.of(listaSlow).limit(10).forEach(System.out::print);
            for (Slowo wyraz : listaSlow) {
                //listaSlow.stream(listaSlow).limit(20).forEach(System.out::print);
                //ArrayList<Integer> newList = listaSlow.limit(10).collect(Collectors.toList());
                //listaSlow.stream().limit(userLimit).forEach(System.out::println);

            }
            licznik++;

(trochę bałagan, bo było eksperymentowane)  

komentarz 27 kwietnia 2022 przez Wiciorny Ekspert (270,110 p.)

wynika to z tego, że nie przeczytałeś co napisałem Stream.of(array) zrobi strumień z całej tablicy więc limit-> nie zadziała? Dlaczego? Bo jeśli zrobisz Stream.of(array) - to masz jeden element, całą TABLICE, a nie jej elementy. 

Ten kod niżej działa jak cała twoja 'PĘTLA FOR...' więc jest ona niepotrzebna tak samo jak licznik. 

Arrays.stream(listaSlow.toArray()).limit(10).forEach(System.out::print);

Arrays.stream działa, nie wiem jak z twoimi importami ale też kłania się u Ciebie znajomość podstaw programowania- ty masz LISTE, a potrzebujesz tablicy.
Jesli chcesz bezpośrednio iterować po ARRAY_LIST to napisz tak 

  listaSlow.stream().limit(10).forEach(System.out::print);

Jeśli już programujesz to czytaj, ucz się a nie rób wszystkiego bezmyślnie... chyba że robisz to na zadanie na studia i nie zamierzasz uuczyć się porgramowania, ale korzystasz z LISTY,TABLICY a nie wchodzisz w ogóle w dokumentacje dostepnych metod. 
gdzie od razu wylistowana jest konwersja listy na tablice toArray()... a dodatkowo sam blad ktory Ci sie wyswietla o tym mowi 
 

komentarz 28 kwietnia 2022 przez Czang Kai Shrek Obywatel (1,990 p.)
Rozgryzłeś mnie. Studiuję i akurat programowanie to nie nie jest moja mocna strona czy coś w czym chciał bym działać. Jednak po ostatnim komentarzu wszystko zrozumiałem, zamiast tylko kopiować, dzięki.

Podobne pytania

0 głosów
1 odpowiedź 115 wizyt
pytanie zadane 20 grudnia 2020 w Java przez T100 Obywatel (1,450 p.)
0 głosów
2 odpowiedzi 161 wizyt
pytanie zadane 5 grudnia 2020 w Java przez T100 Obywatel (1,450 p.)
0 głosów
1 odpowiedź 403 wizyt
pytanie zadane 4 kwietnia 2020 w Java przez mm Użytkownik (890 p.)

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...