Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
2
20231104-KursPodstawowyALX
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
20231104-KursPodstawowyALX
Commits
0829b6b4
Commit
0829b6b4
authored
Jan 07, 2024
by
Patryk Czarnik
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
przykłady grupowania
parent
21758fe3
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
222 additions
and
0 deletions
+222
-0
Grupowanie_v1.java
src/main/java/emps/v2_obiektowo/Grupowanie_v1.java
+40
-0
Grupowanie_v2.java
src/main/java/emps/v2_obiektowo/Grupowanie_v2.java
+43
-0
Grupowanie_v2a.java
src/main/java/emps/v2_obiektowo/Grupowanie_v2a.java
+36
-0
Grupowanie_v3.java
src/main/java/emps/v2_obiektowo/Grupowanie_v3.java
+31
-0
Grupowanie_v4.java
src/main/java/emps/v2_obiektowo/Grupowanie_v4.java
+35
-0
Grupowanie_v5.java
src/main/java/emps/v2_obiektowo/Grupowanie_v5.java
+37
-0
No files found.
src/main/java/emps/v2_obiektowo/Grupowanie_v1.java
0 → 100644
View file @
0829b6b4
package
emps
.
v2_obiektowo
;
import
java.util.HashSet
;
import
java.util.List
;
import
java.util.Set
;
/* W tej wersji:
złożoność obliczeniowa nie jest optymalna. Cała lista jest przeglądana wiele razy:
- raz, aby ustalić zbiór jobów,
- ponownie dla każdego joba.
Dla naszego pliku to jest (1+19) * 107 powtórzeń.
*/
public
class
Grupowanie_v1
{
public
static
void
main
(
String
[]
args
)
{
List
<
Employee
>
emps
=
ObslugaCSV
.
wczytajDane
();
// etap 1: utworzenie zbioru jobów (bez powtórzeń)
Set
<
String
>
jobs
=
new
HashSet
<>();
for
(
Employee
emp
:
emps
)
{
jobs
.
add
(
emp
.
getJobTitle
());
}
// System.out.println(jobs);
// etap 2: dla każdego z tych jobów liczymy (za pomocą pętli i ifa) średnią dla tego joba:
for
(
String
job
:
jobs
)
{
double
suma
=
0
;
int
ile
=
0
;
for
(
Employee
emp
:
emps
)
{
if
(
emp
.
getJobTitle
().
equals
(
job
))
{
suma
+=
emp
.
getSalary
();
ile
++;
}
}
double
srednia
=
suma
/
ile
;
System
.
out
.
printf
(
"| %-32s | %2d | %8.2f |\n"
,
job
,
ile
,
srednia
);
}
}
}
src/main/java/emps/v2_obiektowo/Grupowanie_v2.java
0 → 100644
View file @
0829b6b4
package
emps
.
v2_obiektowo
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
/* Klasyczny algorytm grupowania w oparciu o słowniki.
* W tej wersji wykorzystujemy tylko operacje get, put, containsKey, które są dostępne od samego początku istnienia słowników Javie.
*/
public
class
Grupowanie_v2
{
public
static
void
main
(
String
[]
args
)
{
List
<
Employee
>
emps
=
ObslugaCSV
.
wczytajDane
();
Map
<
String
,
Integer
>
sumy
=
new
HashMap
<>();
Map
<
String
,
Integer
>
ilosci
=
new
HashMap
<>();
for
(
Employee
emp
:
emps
)
{
// sprawdzamy, czy słownik już zawiera wpis dotyczący tego joba
if
(
sumy
.
containsKey
(
emp
.
getJobTitle
()))
{
// to jest kolejny pracownik z tego stanowiska → trzeba zwiększyć sumę
int
suma
=
sumy
.
get
(
emp
.
getJobTitle
());
sumy
.
put
(
emp
.
getJobTitle
(),
suma
+
emp
.
getSalary
());
int
ilosc
=
ilosci
.
get
(
emp
.
getJobTitle
());
ilosci
.
put
(
emp
.
getJobTitle
(),
ilosc
+
1
);
}
else
{
// to jest pierwszy pracownik z tego stanowiska
sumy
.
put
(
emp
.
getJobTitle
(),
emp
.
getSalary
());
ilosci
.
put
(
emp
.
getJobTitle
(),
1
);
}
}
// System.out.println(sumy);
// System.out.println(ilosci);
for
(
String
job
:
sumy
.
keySet
())
{
int
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/emps/v2_obiektowo/Grupowanie_v2a.java
0 → 100644
View file @
0829b6b4
package
emps
.
v2_obiektowo
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
/* Klasyczny algorytm grupowania w oparciu o słowniki.
* W tej wersji wykorzystujemy tylko operacje get, put, containsKey, które są dostępne od samego początku istnienia słowników Javie.
*/
public
class
Grupowanie_v2a
{
public
static
void
main
(
String
[]
args
)
{
final
List
<
Employee
>
emps
=
ObslugaCSV
.
wczytajDane
();
final
Map
<
String
,
Integer
>
sumy
=
new
HashMap
<>();
final
Map
<
String
,
Integer
>
ilosci
=
new
HashMap
<>();
for
(
Employee
emp
:
emps
)
{
final
String
jobTitle
=
emp
.
getJobTitle
();
if
(
sumy
.
containsKey
(
jobTitle
))
{
sumy
.
put
(
jobTitle
,
sumy
.
get
(
jobTitle
)
+
emp
.
getSalary
());
ilosci
.
put
(
jobTitle
,
ilosci
.
get
(
jobTitle
)
+
1
);
}
else
{
sumy
.
put
(
jobTitle
,
emp
.
getSalary
());
ilosci
.
put
(
jobTitle
,
1
);
}
}
for
(
String
job
:
sumy
.
keySet
())
{
int
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/emps/v2_obiektowo/Grupowanie_v3.java
0 → 100644
View file @
0829b6b4
package
emps
.
v2_obiektowo
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.TreeMap
;
/* W tej wersji używamy operacji getOrDefault (od Java 8) - dzięki temu można nie pisać ifa. */
public
class
Grupowanie_v3
{
public
static
void
main
(
String
[]
args
)
{
List
<
Employee
>
emps
=
ObslugaCSV
.
wczytajDane
();
Map
<
String
,
Integer
>
sumy
=
new
TreeMap
<>();
Map
<
String
,
Integer
>
ilosci
=
new
TreeMap
<>();
for
(
Employee
emp
:
emps
)
{
int
suma
=
sumy
.
getOrDefault
(
emp
.
getJobTitle
(),
0
);
sumy
.
put
(
emp
.
getJobTitle
(),
suma
+
emp
.
getSalary
());
int
ilosc
=
ilosci
.
getOrDefault
(
emp
.
getJobTitle
(),
0
);
ilosci
.
put
(
emp
.
getJobTitle
(),
ilosc
+
1
);
}
for
(
String
job
:
sumy
.
keySet
())
{
int
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/emps/v2_obiektowo/Grupowanie_v4.java
0 → 100644
View file @
0829b6b4
package
emps
.
v2_obiektowo
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
/* Tu wykorzystamy operacje putIfAbsent / computeIfPresent (od Java 8) */
public
class
Grupowanie_v4
{
public
static
void
main
(
String
[]
args
)
{
List
<
Employee
>
emps
=
ObslugaCSV
.
wczytajDane
();
Map
<
String
,
Integer
>
sumy
=
new
HashMap
<>();
Map
<
String
,
Integer
>
ilosci
=
new
HashMap
<>();
for
(
Employee
emp
:
emps
)
{
// Gdyby jeszcze nie było wartości pod tym kluczem, wpisujemy zera
sumy
.
putIfAbsent
(
emp
.
getJobTitle
(),
0
);
ilosci
.
putIfAbsent
(
emp
.
getJobTitle
(),
0
);
// Za pomocą wyrażeń lambda określamy, w jaki sposób mają zostać zmienione wartośc.
// Funkcja modyfikująca jako argumenty przyjmuje klucz oraz poprzednią wartość ze słownika, a w wyniku ma dać nową wartość
sumy
.
computeIfPresent
(
emp
.
getJobTitle
(),
(
job
,
suma
)
->
suma
+
emp
.
getSalary
());
ilosci
.
computeIfPresent
(
emp
.
getJobTitle
(),
(
job
,
ilosc
)
->
ilosc
+
1
);
}
for
(
String
job
:
sumy
.
keySet
())
{
int
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/emps/v2_obiektowo/Grupowanie_v5.java
0 → 100644
View file @
0829b6b4
package
emps
.
v2_obiektowo
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
/* Tu wykorzystamy operację merge (od Java 8)
*
* Operacja merge idealnie pasuje do schematu, który realizujemy w tym zadaniu.
* slownik.merge(KLUCZ, WARTOSC, FUNKCJA)
* - jeśli w słowniku nie ma jeszcze KLUCZa, to pod KLUCZ wpisywana jest WARTOSC
* - jeśli w słowniku pod KLUCZ jest STARA_WARTOSC, to wykorzystywana jest FUNKCJA w taki sposób:
* NOWA_WARTOSC = FUNKCJA(STARA_WARTOSC, WARTOSC)
* a następne NOWA_WARTOSC wpisywana jest do słownika pod KLUCZ
*/
public
class
Grupowanie_v5
{
public
static
void
main
(
String
[]
args
)
{
List
<
Employee
>
emps
=
ObslugaCSV
.
wczytajDane
();
Map
<
String
,
Integer
>
sumy
=
new
HashMap
<>();
Map
<
String
,
Integer
>
ilosci
=
new
HashMap
<>();
for
(
Employee
emp
:
emps
)
{
sumy
.
merge
(
emp
.
getJobTitle
(),
emp
.
getSalary
(),
Integer:
:
sum
);
ilosci
.
merge
(
emp
.
getJobTitle
(),
1
,
Integer:
:
sum
);
}
for
(
String
job
:
sumy
.
keySet
())
{
int
suma
=
sumy
.
get
(
job
);
int
ilosc
=
ilosci
.
get
(
job
);
double
srednia
=
suma
/
ilosc
;
System
.
out
.
printf
(
"| %-32s | %2d | %8.2f |\n"
,
job
,
ilosc
,
srednia
);
}
}
}
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