Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
K
kurs_java_alx_20240321
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Patryk Czarnik
kurs_java_alx_20240321
Commits
68309154
Commit
68309154
authored
May 08, 2024
by
Patryk Czarnik
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
emps funkcyjnie - pierwsze przykłady
parent
de4b263d
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
111 additions
and
0 deletions
+111
-0
P0_WypiszWszystko.java
src/emps/v3_funkcyjnie/P0_WypiszWszystko.java
+22
-0
P1_WypiszDane.java
src/emps/v3_funkcyjnie/P1_WypiszDane.java
+20
-0
P2_Filtrowanie.java
src/emps/v3_funkcyjnie/P2_Filtrowanie.java
+25
-0
P3_SredniaWszystkich.java
src/emps/v3_funkcyjnie/P3_SredniaWszystkich.java
+44
-0
No files found.
src/emps/v3_funkcyjnie/P0_WypiszWszystko.java
0 → 100644
View file @
68309154
package
emps
.
v3_funkcyjnie
;
import
java.util.List
;
public
class
P0_WypiszWszystko
{
public
static
void
main
(
String
[]
args
)
{
List
<
Employee
>
emps
=
ObslugaCSV
.
wczytaj
(
"emps.csv"
);
// Aby zrobić coś dla każdego elementu listy, np. wypisać na ekran,
// można użyć operacji forEach.
// Do forEach można przekazać wyrażenie lambda mówiące, co zrobić z każdym elementem.
// emps.forEach(emp -> System.out.println(emp));
// W przypadku, gdy operacja sprowadza się do wywołania konkretnej metody, można uzyć notacji "method reference".
emps
.
forEach
(
System
.
out
::
println
);
// Można też najpierw pobrać "strumień" i dopiero na strumienia wywołać forEach, ale tu nie jest to konieczne.
// emps.stream().forEach(System.out::println);
}
}
src/emps/v3_funkcyjnie/P1_WypiszDane.java
0 → 100644
View file @
68309154
package
emps
.
v3_funkcyjnie
;
import
java.util.List
;
public
class
P1_WypiszDane
{
public
static
void
main
(
String
[]
args
)
{
List
<
Employee
>
emps
=
ObslugaCSV
.
wczytaj
(
"emps.csv"
);
// Cel: wypisać wybrane pola.
// Sposób 1: w wyrażeniu lambda napisać printa, który wypisuje wybrane rzeczy
// emps.forEach(emp -> System.out.println(emp.getFirstName() + " " + emp.getLastName() + " " + emp.getSalary()));
// Sposób 2, oparty o stream: najpierw mapujemy obiekty Employee na Stringi, a następnie wypisujemy te Stringi
emps
.
stream
()
.
map
(
emp
->
emp
.
getFirstName
()
+
" "
+
emp
.
getLastName
()
+
" "
+
emp
.
getSalary
())
.
forEach
(
System
.
out
::
println
);
}
}
src/emps/v3_funkcyjnie/P2_Filtrowanie.java
0 → 100644
View file @
68309154
package
emps
.
v3_funkcyjnie
;
import
java.util.List
;
public
class
P2_Filtrowanie
{
// Program wypisuje tylko zarabiających >= 10 tys,
// realizujemy to filtrowanaiem, ale przy okazji pokazuję Wam schemat "filter / map" - podstawowe operacje na strumieniach.
public
static
void
main
(
String
[]
args
)
{
List
<
Employee
>
emps
=
ObslugaCSV
.
wczytaj
(
"emps.csv"
);
emps
.
stream
()
.
filter
(
emp
->
emp
.
getSalary
()
>=
10_000
)
.
map
(
emp
->
emp
.
getFirstName
()
+
" "
+
emp
.
getLastName
()
+
" "
+
emp
.
getSalary
())
.
map
(
String:
:
toUpperCase
)
// ew. .map(s -> s.toUpperCase())
.
forEach
(
System
.
out
::
println
);
// Cały ten ↑ zapis jest określany "pipeline", który składa się z:
// - źródła danych
// - dowolnej liczby operacji pośrednich (intermediate, tutaj są to filter i map)
// - operacji końcowej (terminal, tutaj jest to forEach)
// Każdy obiekt przechodzi przez kolejne etapy przetwarzania, "schodzi z góry w dół".
}
}
src/emps/v3_funkcyjnie/P3_SredniaWszystkich.java
0 → 100644
View file @
68309154
package
emps
.
v3_funkcyjnie
;
import
java.util.List
;
import
java.util.OptionalDouble
;
import
java.util.stream.Collectors
;
public
class
P3_SredniaWszystkich
{
public
static
void
main
(
String
[]
args
)
{
List
<
Employee
>
emps
=
ObslugaCSV
.
wczytaj
(
"emps.csv"
);
/*
// Uwaga, to nie zadziała; to nie tak się robi.
// Wewnątrz wyrażeń lambda nie wolno modyfikować zmiennych lokalnych zdefiniowanych na zewnątrz tych wyrażeń.
// (generalnie - nie wolno uzywać zmiennych, które nie są "effectively final"
double suma = 0;
int ile = 0;
emps.forEach(emp -> {
suma += emp.getSalary();
ile++;
});
*/
// Można użyć gotowych dedykowanych rozwiązań
// 1) IntStream
OptionalDouble
srednia1
=
emps
.
stream
()
.
mapToInt
(
Employee:
:
getSalary
)
.
average
();
System
.
out
.
println
(
srednia1
);
// Gdyby strumień był pusty, to wynikiem byłby pusty Optional.
// Aby dostać się do samej liczby, najelepiej zrobić to tak (w razie braku danych podstawi 0):
double
srednia2
=
emps
.
stream
()
.
mapToInt
(
Employee:
:
getSalary
)
.
average
()
.
orElse
(
0
);
System
.
out
.
println
(
srednia2
);
// 2) odpowiedni Collector, czyli taka maszynka, która zbiera dane i na końcu zwraca wynik
Double
srednia3
=
emps
.
stream
().
collect
(
Collectors
.
averagingInt
(
Employee:
:
getSalary
));
System
.
out
.
println
(
srednia3
);
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment