Aktywne Wpisy

MagicznyMariusz +274
źródło: 1000017298
Pobierz
chodźcie se zjemy cukierkuw to bendzie fajen piontek (⌐ ͡■ ͜ʖ ͡■)
czemstujcie sie
czemstujcie sie
źródło: images (80)
PobierzSkopiuj link
Skopiuj link
źródło: 1000017298
Pobierz
źródło: images (80)
PobierzRegulamin
Reklama
Kontakt
O nas
FAQ
Osiągnięcia
Ranking
Hej, uczę się interfejsów funkcyjnych i natrafiłem na zadanie które rozwaliło mi głowę (o stąd: https://hyperskill.org/learn/step/2398)
Mam sobie takie oto metody:
public static void printFilteredAccounts(List<Account> accounts) {
List<Account> nonEmptyAccounts = filter(accounts, s -> s.getBalance() > 0);
nonEmptyAccounts.forEach(a -> System.out.print(a.getNumber() + " "));
}
public static <T> List<T> filter(List<T> elems, Predicate<T> predicate) {
return elems.stream()
.filter(predicate)
.collect(Collectors.toList());
}
Moje pytanie brzmi: skąd w
List<Account> nonEmptyAccounts = filter(accounts, s -> s.getBalance() > 0);przy lambdzie
s -> s.getBalance() > 0Java wie, że ma s być tam pojedynczym obiektem, i to rodzaju Account, a nie coś czymś innym? I skąd od razu wie, że to predykat? Jakim cudem?
Do tej pory rozumiałem lambdy rozumiałem tak:
Function<String, String> helloFunction = (name) -> "Hello" + name;System.out.println(helloFunction.apply("John"));
Jest to ok, mam argument String i zwracam String, no to ok, wszystko jasne. Ale dlaczego do cholery mogę skumać skąd Java wie, że określenie typu
Predicate<Account> accountPredicate = s -> s.getBalance() > 0ma zwracać boolean? A tym bardziej, jeżeli lambda jest zastosowana w funkcji, takiej jak tutaj:
filter(accounts, s -> s.getBalance() > 0)Jak?
źródło: maxresdefault
Pobierz@arct2: bo interfejs Predicate posiada metodę test(T t) która zwraca boolean
@arct2: generyki, poczytaj sobie o generykach
PredicateprzyjmujeAccount?Czy jak zapiszesz to w ten sposób, będzie jaśniej:
Predicate<Account> accountPredicate = s -> s.getBalance() > 0;List<Account> nonEmptyAccounts = filter(accounts, accountPredicate);
Definiujesz predykat, z typem
Account, to stąd Java wie, że w predykacie ma do czynienia z obiektem Account,