• 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
576 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 (273,730 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 (273,730 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 (273,730 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ź 119 wizyt
pytanie zadane 20 grudnia 2020 w Java przez T100 Obywatel (1,450 p.)
0 głosów
2 odpowiedzi 169 wizyt
pytanie zadane 5 grudnia 2020 w Java przez T100 Obywatel (1,450 p.)
0 głosów
1 odpowiedź 417 wizyt
pytanie zadane 4 kwietnia 2020 w Java przez mm Użytkownik (890 p.)

92,757 zapytań

141,678 odpowiedzi

320,429 komentarzy

62,101 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

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!

...