Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
waluty_22sierpnia
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
waluty_22sierpnia
Commits
afae35c1
Commit
afae35c1
authored
Aug 22, 2021
by
Patryk Czarnik
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
grupowanie employeesów
parent
990f77a9
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
394 additions
and
0 deletions
+394
-0
Grupowanie1.java
src/main/java/przyklady/emps/obiektowo/Grupowanie1.java
+45
-0
Grupowanie1_poprawione.java
...java/przyklady/emps/obiektowo/Grupowanie1_poprawione.java
+48
-0
Grupowanie2.java
src/main/java/przyklady/emps/obiektowo/Grupowanie2.java
+40
-0
Grupowanie3.java
src/main/java/przyklady/emps/obiektowo/Grupowanie3.java
+34
-0
Grupowanie4.java
src/main/java/przyklady/emps/obiektowo/Grupowanie4.java
+46
-0
Grupowanie5.java
src/main/java/przyklady/emps/obiektowo/Grupowanie5.java
+31
-0
Grupowanie5a.java
src/main/java/przyklady/emps/obiektowo/Grupowanie5a.java
+36
-0
Grupowanie6.java
src/main/java/przyklady/emps/obiektowo/Grupowanie6.java
+38
-0
Grupowanie7.java
src/main/java/przyklady/emps/obiektowo/Grupowanie7.java
+32
-0
JobInfo.java
src/main/java/przyklady/emps/obiektowo/JobInfo.java
+44
-0
No files found.
src/main/java/przyklady/emps/obiektowo/Grupowanie1.java
0 → 100644
View file @
afae35c1
package
przyklady
.
emps
.
obiektowo
;
import
java.util.HashSet
;
import
java.util.List
;
import
java.util.Objects
;
import
java.util.Set
;
import
przyklady.emps.Employee
;
import
przyklady.emps.ObslugaCSV
;
public
class
Grupowanie1
{
// Ta wersja nie jest optymalnie wydajna, dla 107 pracowników i 19 stanowisk
// pracowników przeglądamy 20 * 107 razy.
public
static
void
main
(
String
[]
args
)
{
List
<
Employee
>
employees
=
ObslugaCSV
.
wczytaj
(
"pracownicy.csv"
);
// etap 1: ustalenie jakie są stanowiska (jobs) wśród pracowników
Set
<
String
>
jobs
=
new
HashSet
<>();
for
(
Employee
emp
:
employees
)
{
jobs
.
add
(
emp
.
getJobTitle
());
}
System
.
out
.
println
(
"Zebrane nazwy stanowisk ("
+
jobs
.
size
()
+
"):"
);
System
.
out
.
println
(
jobs
);
System
.
out
.
println
();
// etap 2: dla każdego stanowiska wyliczenie średniej
for
(
String
job
:
jobs
)
{
double
suma
=
0
;
int
ilosc
=
0
;
for
(
Employee
emp
:
employees
)
{
if
(
Objects
.
equals
(
emp
.
getJobTitle
(),
job
))
{
suma
+=
emp
.
getSalary
();
ilosc
++;
}
}
double
srednia
=
suma
/
ilosc
;
System
.
out
.
printf
(
"| %32s | %2d | %8.2f |\n"
,
job
,
ilosc
,
srednia
);
}
}
}
src/main/java/przyklady/emps/obiektowo/Grupowanie1_poprawione.java
0 → 100644
View file @
afae35c1
package
przyklady
.
emps
.
obiektowo
;
import
java.util.HashSet
;
import
java.util.List
;
import
java.util.Objects
;
import
java.util.Set
;
import
przyklady.emps.Employee
;
import
przyklady.emps.ObslugaCSV
;
public
class
Grupowanie1_poprawione
{
public
static
void
main
(
String
[]
args
)
{
List
<
Employee
>
employees
=
ObslugaCSV
.
wczytaj
(
"pracownicy.csv"
);
Set
<
String
>
jobs
=
zbierzNazwyStanowisk
(
employees
);
System
.
out
.
println
(
"Zebrane nazwy stanowisk ("
+
jobs
.
size
()
+
"):"
);
System
.
out
.
println
(
jobs
);
System
.
out
.
println
();
for
(
String
job
:
jobs
)
{
obliczDlaStanowiska
(
employees
,
job
);
}
}
private
static
Set
<
String
>
zbierzNazwyStanowisk
(
List
<
Employee
>
employees
)
{
Set
<
String
>
jobs
=
new
HashSet
<>();
for
(
Employee
emp
:
employees
)
{
jobs
.
add
(
emp
.
getJobTitle
());
}
return
jobs
;
}
private
static
void
obliczDlaStanowiska
(
List
<
Employee
>
employees
,
String
job
)
{
double
suma
=
0
;
int
ilosc
=
0
;
for
(
Employee
emp
:
employees
)
{
if
(
Objects
.
equals
(
emp
.
getJobTitle
(),
job
))
{
suma
+=
emp
.
getSalary
();
ilosc
++;
}
}
double
srednia
=
suma
/
ilosc
;
System
.
out
.
printf
(
"| %32s | %2d | %8.2f |\n"
,
job
,
ilosc
,
srednia
);
}
}
src/main/java/przyklady/emps/obiektowo/Grupowanie2.java
0 → 100644
View file @
afae35c1
package
przyklady
.
emps
.
obiektowo
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
przyklady.emps.Employee
;
import
przyklady.emps.ObslugaCSV
;
// Klasyczny schemat grupowania za pomocą słowników.
// Używam wyłącznie starych operacji słownikowych dostępnych od Javy 5.
public
class
Grupowanie2
{
public
static
void
main
(
String
[]
args
)
{
List
<
Employee
>
employees
=
ObslugaCSV
.
wczytaj
(
"pracownicy.csv"
);
Map
<
String
,
Double
>
sumy
=
new
HashMap
<>();
Map
<
String
,
Integer
>
ilosci
=
new
HashMap
<>();
for
(
Employee
emp
:
employees
)
{
String
jobTitle
=
emp
.
getJobTitle
();
if
(
sumy
.
containsKey
(
jobTitle
))
{
double
sumaDoTejPory
=
sumy
.
get
(
jobTitle
);
sumy
.
put
(
jobTitle
,
sumaDoTejPory
+
emp
.
getSalary
());
int
iloscDoTejPory
=
ilosci
.
get
(
jobTitle
);
ilosci
.
put
(
jobTitle
,
iloscDoTejPory
+
1
);
}
else
{
sumy
.
put
(
jobTitle
,
(
double
)
emp
.
getSalary
());
ilosci
.
put
(
jobTitle
,
1
);
}
}
for
(
String
job
:
sumy
.
keySet
())
{
double
suma
=
sumy
.
get
(
job
);
int
ilosc
=
ilosci
.
get
(
job
);
double
srednia
=
suma
/
ilosc
;
System
.
out
.
printf
(
"| %32s | %2d | %8.2f |\n"
,
job
,
ilosc
,
srednia
);
}
}
}
src/main/java/przyklady/emps/obiektowo/Grupowanie3.java
0 → 100644
View file @
afae35c1
package
przyklady
.
emps
.
obiektowo
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.TreeMap
;
import
przyklady.emps.Employee
;
import
przyklady.emps.ObslugaCSV
;
// W tej wersji używamy nowej operacji od Java 8: getOrDefault. Dzięki temu nie piszemy if-a
public
class
Grupowanie3
{
public
static
void
main
(
String
[]
args
)
{
List
<
Employee
>
employees
=
ObslugaCSV
.
wczytaj
(
"pracownicy.csv"
);
Map
<
String
,
Double
>
sumy
=
new
TreeMap
<>();
Map
<
String
,
Integer
>
ilosci
=
new
TreeMap
<>();
for
(
Employee
emp
:
employees
)
{
String
jobTitle
=
emp
.
getJobTitle
();
double
sumaDoTejPory
=
sumy
.
getOrDefault
(
jobTitle
,
0.0
);
sumy
.
put
(
jobTitle
,
sumaDoTejPory
+
emp
.
getSalary
());
int
iloscDoTejPory
=
ilosci
.
getOrDefault
(
jobTitle
,
0
);
ilosci
.
put
(
jobTitle
,
iloscDoTejPory
+
1
);
}
for
(
String
job
:
sumy
.
keySet
())
{
double
suma
=
sumy
.
get
(
job
);
int
ilosc
=
ilosci
.
get
(
job
);
double
srednia
=
suma
/
ilosc
;
System
.
out
.
printf
(
"| %32s | %2d | %8.2f |\n"
,
job
,
ilosc
,
srednia
);
}
}
}
src/main/java/przyklady/emps/obiektowo/Grupowanie4.java
0 → 100644
View file @
afae35c1
package
przyklady
.
emps
.
obiektowo
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.TreeMap
;
import
przyklady.emps.Employee
;
import
przyklady.emps.ObslugaCSV
;
// W tej wersji używamy nowej operacji od Java 8: putIfAbsent. Dzięki temu nie piszemy if-a
// Przy okazji: zamiast pary operacji get / put używamy nowej operacji compute(IfPresent)
public
class
Grupowanie4
{
public
static
void
main
(
String
[]
args
)
{
List
<
Employee
>
employees
=
ObslugaCSV
.
wczytaj
(
"pracownicy.csv"
);
Map
<
String
,
Double
>
sumy
=
new
TreeMap
<>();
Map
<
String
,
Integer
>
ilosci
=
new
TreeMap
<>();
for
(
Employee
emp
:
employees
)
{
String
jobTitle
=
emp
.
getJobTitle
();
sumy
.
putIfAbsent
(
jobTitle
,
0.0
);
ilosci
.
putIfAbsent
(
jobTitle
,
0
);
sumy
.
computeIfPresent
(
jobTitle
,
(
klucz
,
wartosc
)
->
wartosc
+
emp
.
getSalary
());
ilosci
.
computeIfPresent
(
jobTitle
,
(
klucz
,
wartosc
)
->
wartosc
+
1
);
}
for
(
String
job
:
sumy
.
keySet
())
{
double
suma
=
sumy
.
get
(
job
);
int
ilosc
=
ilosci
.
get
(
job
);
double
srednia
=
suma
/
ilosc
;
System
.
out
.
printf
(
"| %32s | %2d | %8.2f |\n"
,
job
,
ilosc
,
srednia
);
}
}
}
/* tłumaczenie jak działa compute:
{
int wartosc = sumy.get(jobTitle);
sumy.put(jobTitle, wartosc + emp.getSalary());
}
sumy.computeIfPresent(jobTitle, (klucz, wartosc) -> wartosc + emp.getSalary());
*/
src/main/java/przyklady/emps/obiektowo/Grupowanie5.java
0 → 100644
View file @
afae35c1
package
przyklady
.
emps
.
obiektowo
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.TreeMap
;
import
przyklady.emps.Employee
;
import
przyklady.emps.ObslugaCSV
;
// W tej wersji używamy nowej operacji od Java 8: merge. Ona robi dokładnie to, o co chodzi w tym zadaniu :)
public
class
Grupowanie5
{
public
static
void
main
(
String
[]
args
)
{
List
<
Employee
>
employees
=
ObslugaCSV
.
wczytaj
(
"pracownicy.csv"
);
Map
<
String
,
Double
>
sumy
=
new
TreeMap
<>();
Map
<
String
,
Integer
>
ilosci
=
new
TreeMap
<>();
for
(
Employee
emp
:
employees
)
{
sumy
.
merge
(
emp
.
getJobTitle
(),
(
double
)
emp
.
getSalary
(),
Double:
:
sum
);
ilosci
.
merge
(
emp
.
getJobTitle
(),
1
,
Integer:
:
sum
);
}
for
(
String
job
:
sumy
.
keySet
())
{
double
suma
=
sumy
.
get
(
job
);
int
ilosc
=
ilosci
.
get
(
job
);
double
srednia
=
suma
/
ilosc
;
System
.
out
.
printf
(
"| %32s | %2d | %8.2f |\n"
,
job
,
ilosc
,
srednia
);
}
}
}
src/main/java/przyklady/emps/obiektowo/Grupowanie5a.java
0 → 100644
View file @
afae35c1
package
przyklady
.
emps
.
obiektowo
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.TreeMap
;
import
przyklady.emps.Employee
;
import
przyklady.emps.ObslugaCSV
;
// W tej wersji używamy nowej operacji od Java 8: merge. Ona robi dokładnie to, o co chodzi w tym zadaniu :)
public
class
Grupowanie5a
{
public
static
void
main
(
String
[]
args
)
{
List
<
Employee
>
employees
=
ObslugaCSV
.
wczytaj
(
"pracownicy.csv"
);
Map
<
String
,
Double
>
sumy
=
new
TreeMap
<>();
Map
<
String
,
Integer
>
ilosci
=
new
TreeMap
<>();
for
(
Employee
emp
:
employees
)
{
ilosci
.
merge
(
emp
.
getJobTitle
(),
1
,
(
x
,
y
)
->
x
+
y
);
sumy
.
merge
(
emp
.
getJobTitle
(),
(
double
)
emp
.
getSalary
(),
(
staraWartosc
,
zmiana
)
->
staraWartosc
+
zmiana
);
// merge:
// 1) jeśli danego klucza jeszcze nie ma, wstawia podaną wartość, tutaj salary
// 2) jeśli taki klucz już jest, to podana funkcja jest wywoływana dla argumentów:
// ("stara wartość ze słownika", "wartość podana tutaj", czyli salary.
// wynik tej funkcji jest wstawiany do mapy jako nowa wartość
}
for
(
String
job
:
sumy
.
keySet
())
{
double
suma
=
sumy
.
get
(
job
);
int
ilosc
=
ilosci
.
get
(
job
);
double
srednia
=
suma
/
ilosc
;
System
.
out
.
printf
(
"| %32s | %2d | %8.2f |\n"
,
job
,
ilosc
,
srednia
);
}
}
}
src/main/java/przyklady/emps/obiektowo/Grupowanie6.java
0 → 100644
View file @
afae35c1
package
przyklady
.
emps
.
obiektowo
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Map.Entry
;
import
java.util.TreeMap
;
import
przyklady.emps.Employee
;
import
przyklady.emps.ObslugaCSV
;
public
class
Grupowanie6
{
public
static
void
main
(
String
[]
args
)
{
final
List
<
Employee
>
employees
=
ObslugaCSV
.
wczytaj
(
"pracownicy.csv"
);
final
Map
<
String
,
int
[]>
mapa
=
new
TreeMap
<>();
for
(
Employee
emp
:
employees
)
{
final
String
jobTitle
=
emp
.
getJobTitle
();
if
(
mapa
.
containsKey
(
jobTitle
))
{
int
[]
wpis
=
mapa
.
get
(
jobTitle
);
wpis
[
0
]
+=
1
;
wpis
[
1
]
+=
emp
.
getSalary
();
// nie trzeba robić put
}
else
{
mapa
.
put
(
jobTitle
,
new
int
[]
{
1
,
(
int
)
emp
.
getSalary
()});
}
}
for
(
Entry
<
String
,
int
[]>
entry
:
mapa
.
entrySet
())
{
String
job
=
entry
.
getKey
();
int
ilosc
=
entry
.
getValue
()[
0
];
int
suma
=
entry
.
getValue
()[
1
];
double
srednia
=
1.0
*
suma
/
ilosc
;
System
.
out
.
printf
(
"%-32s | %2d | %8.2f%n"
,
job
,
ilosc
,
srednia
);
}
}
}
src/main/java/przyklady/emps/obiektowo/Grupowanie7.java
0 → 100644
View file @
afae35c1
package
przyklady
.
emps
.
obiektowo
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.TreeMap
;
import
przyklady.emps.Employee
;
import
przyklady.emps.ObslugaCSV
;
public
class
Grupowanie7
{
public
static
void
main
(
String
[]
args
)
{
final
List
<
Employee
>
employees
=
ObslugaCSV
.
wczytaj
(
"pracownicy.csv"
);
final
Map
<
String
,
JobInfo
>
mapa
=
new
TreeMap
<>();
for
(
Employee
emp
:
employees
)
{
final
String
jobTitle
=
emp
.
getJobTitle
();
if
(
mapa
.
containsKey
(
jobTitle
))
{
JobInfo
jobInfo
=
mapa
.
get
(
jobTitle
);
jobInfo
.
aktualizuj
(
emp
);
}
else
{
JobInfo
jobInfo
=
JobInfo
.
dlaPierwszegoPracownika
(
emp
);
mapa
.
put
(
jobTitle
,
jobInfo
);
}
}
for
(
JobInfo
jobInfo
:
mapa
.
values
())
{
System
.
out
.
printf
(
"%-32s | %2d | %8.2f%n"
,
jobInfo
.
getJob
(),
jobInfo
.
getIlosc
(),
jobInfo
.
getSrednia
());
}
}
}
src/main/java/przyklady/emps/obiektowo/JobInfo.java
0 → 100644
View file @
afae35c1
package
przyklady
.
emps
.
obiektowo
;
import
przyklady.emps.Employee
;
public
class
JobInfo
{
private
final
String
job
;
private
int
ilosc
;
private
double
suma
;
private
JobInfo
(
String
job
,
int
ilosc
,
double
suma
)
{
this
.
job
=
job
;
this
.
ilosc
=
ilosc
;
this
.
suma
=
suma
;
}
public
static
JobInfo
puste
(
String
jobTitle
)
{
return
new
JobInfo
(
jobTitle
,
0
,
0
);
}
public
static
JobInfo
dlaPierwszegoPracownika
(
Employee
emp
)
{
return
new
JobInfo
(
emp
.
getJobTitle
(),
1
,
emp
.
getSalary
());
}
public
void
aktualizuj
(
Employee
emp
)
{
this
.
ilosc
++;
this
.
suma
+=
emp
.
getSalary
();
}
public
String
getJob
()
{
return
job
;
}
public
int
getIlosc
()
{
return
ilosc
;
}
public
double
getSuma
()
{
return
suma
;
}
public
double
getSrednia
()
{
return
suma
/
ilosc
;
}
}
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