├── .gitignore
├── README.md
├── basic-arrays
├── basic-arrays.iml
└── src
│ └── mini
│ └── java
│ └── basic
│ └── arrays
│ ├── Main.java
│ ├── MathVector.java
│ ├── MathVectorLombok.java
│ ├── MathVectorTest.java
│ ├── RandomMathVector.java
│ ├── test
│ ├── README.md
│ └── TimeSeriesTest.java
│ └── testsolution
│ ├── AnonymousTimeSeries.java
│ ├── TimeSeries.java
│ └── TimeSeriesTest.java
├── basic-collections
├── basic-collections.iml
├── dataset.csv
├── dataset_empty_product.csv
├── dataset_malformed_product.csv
├── dataset_malformed_warehouse.csv
└── src
│ └── mini
│ └── java
│ └── basic
│ └── collections
│ ├── CollectionsTest.java
│ └── test
│ ├── CachingAndPagingDataRepository.java
│ ├── DataLoader.java
│ ├── DataMappers.java
│ ├── DataRepositoryTest.java
│ ├── NoDataException.java
│ ├── ProductDataMalformedException.java
│ ├── SimpleDataRepository.java
│ ├── WarehouseDataMalformedException.java
│ └── solution
│ ├── CachingAndPagingDataRepository.java
│ ├── DataLoader.java
│ ├── DataMappers.java
│ ├── DataRepositoryTest.java
│ ├── NoDataException.java
│ ├── ProductDataMalformedException.java
│ ├── SimpleDataRepository.java
│ └── WarehouseDataMalformedException.java
├── basic-generics
├── basic-generics.iml
└── src
│ └── mini
│ └── java
│ └── basic
│ └── generics
│ ├── Dataset.java
│ ├── GenericsTest.java
│ ├── SeriesSummer.java
│ └── TimeSeries.java
├── basic-interfaces
├── basic-interfaces.iml
└── src
│ └── mini
│ └── java
│ └── basic
│ └── interfaces
│ ├── AbstractTimeSeries.java
│ ├── IntegerTimeSeries.java
│ ├── Printable.java
│ ├── SeriesTest.java
│ ├── StringTimeSeries.java
│ ├── Summable.java
│ └── test
│ ├── AbstractRandomizer.java
│ ├── IntegerList.java
│ ├── IntegerRandomizer.java
│ ├── RandomizerTests.java
│ ├── StringRandomizer.java
│ └── TypeAware.java
├── basic-iostreams
├── basic-iostreams.iml
└── src
│ └── mini
│ └── java
│ └── basic
│ └── iostreams
│ ├── SerializableObject.java
│ ├── SerializableObjectWithTransients.java
│ ├── SerializationTests.java
│ ├── TextFileStreamsTests.java
│ └── test
│ ├── CSVDataset.java
│ ├── CSVSerializerDeserializerTest.java
│ └── test.csv
├── basic-objects
├── basic-objects.iml
└── src
│ └── mini
│ └── java
│ └── basic
│ └── objects
│ └── Main.java
├── basic-swing
├── basic-swing.iml
└── src
│ ├── BasicForm.form
│ └── BasicForm.java
├── basic-threading
├── basic-threading.iml
└── src
│ └── mini
│ └── java
│ └── basic
│ └── threading
│ └── ThreadingTest.java
├── docs
└── images
│ ├── add-test-file.gif
│ ├── create-project.gif
│ ├── debug-all-tests.png
│ └── generate-class.gif
├── lab-objective-basics.iml
└── test.csv
/.gitignore:
--------------------------------------------------------------------------------
1 |
2 | \.idea/
3 | out/
4 | *.jar
5 |
6 | gson_serialized\.json
7 |
8 | java_serialized\.bin
9 |
10 | test\.txt
11 |
12 | \.DS_Store
13 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Programowanie Obiektowe - Java
2 | ## MiNI PW, Wiosna 2019/2020
3 |
4 | ### Laboratorium 1 - Środowisko i Hello World
5 |
6 | ```java
7 | package mini.java.basic.objects;
8 |
9 | public class Main {
10 | public static void main(String[] args) {
11 | System.out.println("Hello World!");
12 | }
13 | }
14 | ```
15 |
16 | #### Przydatne do poruszania się po środowisku IntelliJ IDEA
17 | - Sktóry klawiaturowe - https://resources.jetbrains.com/storage/products/intellij-idea/docs/IntelliJIDEA_ReferenceCard.pdf
18 | - Szybki start dla IDEA - https://www.jetbrains.com/help/idea/getting-started.html
19 | - Hello World w Java + IDEA - https://www.jetbrains.com/help/idea/creating-and-running-your-first-java-application.html
20 |
21 | ### Laboratorium 2 i 3 - Obiekty, klasy i tablice
22 |
23 | ```java
24 | package mini.java.basic.objects;
25 |
26 | public class Vehicle {
27 | protected String name;
28 | protected String[] manufacturerNames;
29 | protected int price;
30 | }
31 |
32 | public class Plane extends Vehicle {
33 | private int flightSpeed;
34 | private int altitude;
35 | }
36 |
37 | public class Car extends Vehicle {
38 | private int speed;
39 | }
40 |
41 | public class Bicycle extends Vehicle {
42 | private boolean twoPerson;
43 | }
44 | ```
45 |
46 | #### Przydatne linki
47 | - Dziedziczenie - opis na Wikipedia (teoria) - https://pl.wikipedia.org/wiki/Dziedziczenie_%28programowanie%29
48 | - Dziedziczenie - tutorial od Oracle - https://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html
49 |
50 | #### Poprzednie zadania punktowane
51 | - [Rok 2018/2019](basic-arrays/src/mini/java/basic/arrays/test/README.md)
52 |
53 |
54 | ## Jak skutecznie zabrać się za rozwiązanie zadania punktowanego
55 | [Instrukcja ze zrzutami ekranu](https://github.com/Rughalt/mini-objective-java/wiki/Zadania-Punktowane)
56 |
57 |
58 | ## Oprogramowanie
59 | - Licencje Jetbrains dla studentów - https://www.jetbrains.com/student/
60 | - Java 11/8 - Amazon Corretto - https://docs.aws.amazon.com/corretto/index.html
61 |
62 |
--------------------------------------------------------------------------------
/basic-arrays/basic-arrays.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/basic-arrays/src/mini/java/basic/arrays/Main.java:
--------------------------------------------------------------------------------
1 | package mini.java.basic.arrays;
2 |
3 | public class Main {
4 | public static void main(String[] args) {
5 | // write your code here
6 |
7 | }
8 |
9 |
10 | }
11 |
--------------------------------------------------------------------------------
/basic-arrays/src/mini/java/basic/arrays/MathVector.java:
--------------------------------------------------------------------------------
1 | package mini.java.basic.arrays;
2 |
3 | import java.util.Arrays;
4 |
5 | public class MathVector {
6 | /**
7 | * Tablica licz reprezentująca wektor
8 | */
9 | protected int[] i;
10 |
11 | /**
12 | * Zmienna reprezentująca informację czy wektor jest zrandomizowany
13 | */
14 | protected boolean randomized = false;
15 |
16 | /**
17 | * Tworzy instancję obiektu MathVector z tablicy liczb.
18 | * @implNote int... (zmienna liczba argumentów) jest innym sposobem zapisu int[] przy przekazywaniu jako parametr funkcji
19 | * @param i Tablica liczb do utowrzenia obiektu
20 | */
21 | public MathVector(int... i) {
22 | this.i = i;
23 | }
24 |
25 |
26 | /**
27 | * Prosty getter, zwraca tablicę i
28 | * @return tablica liczb i
29 | */
30 | public int[] getI() {
31 | return i;
32 | }
33 |
34 | /**
35 | * Prosty setter, ustawia wartość tablicy i (przypisuje zmiennej i przekazaną tablicę)
36 | * @param i
37 | */
38 | public void setI(int[] i) {
39 | this.i = i;
40 | }
41 |
42 | /**
43 | *
44 | * @param o
45 | * @return true jeżeli obiekty są identyczne, false jeżeli nie
46 | */
47 | @Override
48 | public boolean equals(Object o) {
49 | if (this == o) return true;
50 | if (o == null || !o.getClass().equals(this.getClass())) return false;
51 | MathVector that = (MathVector) o;
52 | return Arrays.equals(getI(), that.getI());
53 | }
54 |
55 |
56 | /**
57 | * Wylicza hashcode dla obiektu
58 | * @return hashcode
59 | */
60 | @Override
61 | public int hashCode() {
62 | return Arrays.hashCode(getI());
63 | }
64 |
65 | /**
66 | * Zwraca tekst będący reprezentacją obiektu
67 | * @return tekst reprezentujący obiekt
68 | */
69 | @Override
70 | public String toString() {
71 | return "MathVector{" +
72 | "i=" + Arrays.toString(i) +
73 | '}';
74 | }
75 |
76 | /**
77 | * Zwraca nowy wektor będący iloczynem skalarnym tego wektora oraz liczby s
78 | * @param s
79 | * @return wektor
80 | */
81 | public MathVector multiplyByScalar(int s) {
82 | int[] j = new int[this.i.length];
83 | for( int idx = 0; idx < this.i.length; idx++) {
84 | j[idx] = this.i[idx] * s;
85 | }
86 | return new MathVector(j);
87 | }
88 |
89 | /**
90 | * Zwraca długość tablicy i
91 | * @return długość tablicy i
92 | */
93 | public int getLength() {
94 | return i.length;
95 | }
96 |
97 | /**
98 | * Getter dla zmiennej randomized (mówiącej czy wektor jest losowy)
99 | * @return
100 | */
101 | public boolean isRandomized() {
102 | return randomized;
103 | }
104 |
105 | /**
106 | * Setter dla zmiennej randomized (mówiącej czy wektor jest losowy)
107 | */
108 | public void setRandomized(boolean randomized) {
109 | this.randomized = randomized;
110 | }
111 |
112 | /**
113 | * Metoda zwracającz informację czy wektor jest zrandomizowany
114 | * @return
115 | */
116 | public boolean isRandomizedMethod() {
117 | return false;
118 | }
119 | }
120 |
--------------------------------------------------------------------------------
/basic-arrays/src/mini/java/basic/arrays/MathVectorLombok.java:
--------------------------------------------------------------------------------
1 | package mini.java.basic.arrays;
2 |
3 | import lombok.*;
4 |
5 | import java.util.Arrays;
6 |
7 | @Data
8 | public class MathVectorLombok {
9 | protected int[] data;
10 | protected boolean randomized = false;
11 | }
12 |
13 |
14 |
--------------------------------------------------------------------------------
/basic-arrays/src/mini/java/basic/arrays/MathVectorTest.java:
--------------------------------------------------------------------------------
1 | package mini.java.basic.arrays;
2 |
3 | import org.junit.Assert;
4 |
5 | import static org.junit.Assert.*;
6 |
7 | public class MathVectorTest {
8 |
9 | /**
10 | * Test sprawdzający sposób działania prymitywnego przyrównania (==) dla porównywania obiektów
11 | */
12 | @org.junit.Test
13 | public void primitiveEquals() {
14 | MathVector vector1 = new MathVector(1,2,3,4);
15 | int[] j = {1,2,3,4};
16 | MathVector vector2 = new MathVector(j);
17 | assertFalse(vector1 == vector2);
18 | }
19 |
20 | /**
21 | * Test sprawdzający sposób działania zaimplementowanej metody equals dla porównywania obiektów (obiekty w założeniu różne)
22 | */
23 | @org.junit.Test
24 | public void equalsFalse() {
25 | MathVector vector1 = new MathVector(1,2,3,4);
26 | MathVector vector2 = new MathVector(1,2,3);
27 | assertNotEquals(vector1, vector2);
28 | }
29 |
30 | /**
31 | * Test sprawdzający sposób działania zaimplementowanej metody equals dla porównywania obiektów (obiekty w założeniu identyczne)
32 | */
33 | @org.junit.Test
34 | public void equalsTrue() {
35 | MathVector vector1 = new MathVector(1,2,3,4);
36 | int[] j = {1,2,3,4};
37 | MathVector vector2 = new MathVector(j);
38 | assertEquals(vector1, vector2);
39 | }
40 |
41 | /**
42 | * Test sprawdzający sposób działania zaimplementowanej metody hashcode dla porównywania obiektów (obiekty w założeniu identyczne)
43 | */
44 | @org.junit.Test
45 | public void hashcodeEquals() {
46 | MathVector vector1 = new MathVector(1,2,3,4);
47 | MathVector vector2 = new MathVector(1,2,3,4);
48 | assertEquals(vector1.hashCode(), vector2.hashCode());
49 | }
50 |
51 |
52 | /**
53 | * Test sprawdzający sposób działanie metody multiplyByScalar
54 | */
55 | @org.junit.Test
56 | public void multiplicationTest() {
57 | MathVector vector1 = new MathVector(1,2,3,4);
58 | MathVector vector2 = vector1.multiplyByScalar(3);
59 | assertEquals(vector1, new MathVector(1,2,3,4));
60 | assertEquals(vector2, new MathVector(3,6,9,12));
61 | }
62 |
63 |
64 | /**
65 | * Test sprawdzający wynik porównania po rzutowaniu
66 | */
67 | @org.junit.Test
68 | public void castEqualityTest() {
69 | RandomMathVector vector1 = new RandomMathVector(5);
70 | MathVector castedVector = (MathVector) vector1;
71 | RandomMathVector castedVector2 = (RandomMathVector) castedVector;
72 | assertEquals(castedVector2,vector1);
73 | }
74 |
75 | /**
76 | * Test sprawdzający wynik porównania bez rzutowania dla klasy dziedziczącej i głównej
77 | */
78 | @org.junit.Test
79 | public void classEqualityTest() {
80 | RandomMathVector vector1 = new RandomMathVector(5);
81 | MathVector vector2 = new MathVector(1,2,3,4);
82 | assertNotEquals(vector1.getClass(),vector2.getClass());
83 | }
84 |
85 | /**
86 | * Test sprawdzający zachowanie metody instanceof dla klasy dziedziczącej
87 | */
88 | @org.junit.Test
89 | public void classEqualityInstanceOfTest() {
90 | RandomMathVector vector1 = new RandomMathVector(5);
91 | assertTrue(vector1 instanceof MathVector);
92 | }
93 |
94 | /**
95 | * Test sprawdzający długość nowego wektora typu RandomMathVector
96 | */
97 | @org.junit.Test
98 | public void randomVectorLengthTest() {
99 | MathVector vector1 = new RandomMathVector(5);
100 | assertEquals(vector1.getLength(),5);
101 | }
102 |
103 | /**
104 | * Testy sprawdzające zachowanie metod isRandomized i isRandomizedMethod dla obiektów klas MathVector i RandomMathVector
105 | */
106 | @org.junit.Test
107 | public void isRandomizedTestRandomMathVector() {
108 | MathVector vector1 = new RandomMathVector(5);
109 | assertTrue(vector1.isRandomized());
110 | }
111 |
112 |
113 | @org.junit.Test
114 | public void isRandomizedTestMathVector() {
115 | MathVector vector1 = new MathVector(5);
116 | assertFalse(vector1.isRandomized());
117 | }
118 |
119 | @org.junit.Test
120 | public void isRandomizedTestRandomMathVectorMethod() {
121 | MathVector vector1 = new RandomMathVector(5);
122 | assertTrue(vector1.isRandomizedMethod());
123 | }
124 |
125 |
126 | @org.junit.Test
127 | public void isRandomizedTestMathVectorMethod() {
128 | MathVector vector1 = new MathVector(5);
129 | assertFalse(vector1.isRandomizedMethod());
130 | }
131 |
132 |
133 | @org.junit.Test
134 | public void lombokTest() {
135 | MathVectorLombok mlLombok = new MathVectorLombok();
136 | ml.
137 | }
138 | }
--------------------------------------------------------------------------------
/basic-arrays/src/mini/java/basic/arrays/RandomMathVector.java:
--------------------------------------------------------------------------------
1 | package mini.java.basic.arrays;
2 |
3 | public class RandomMathVector extends MathVector {
4 |
5 | public RandomMathVector(int length) {
6 | this.i = new int[length];
7 | for (int idx = 0; idx < length; idx++)
8 | this.i[idx] = (int) (Math.random()*10.0);
9 | this.randomized = true;
10 | }
11 |
12 | @Override
13 | public boolean isRandomizedMethod() {
14 | return true;
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/basic-arrays/src/mini/java/basic/arrays/test/README.md:
--------------------------------------------------------------------------------
1 | # 2018/2019 - Zadanie 1 - Tablice i dziedziczenie
2 |
3 | Twoim zadaniem jest napisanie dwóch klas implementujących metody tak,
4 | aby napisane testy jednostkowe wykonały się poprawnie. Sygnatury klas to:
5 |
6 | ```java
7 | /***
8 | * Klasa ta reprezentuje serie czasową z danymi
9 | */
10 | class TimeSeries {
11 | private int[] data; // Dane w serii
12 | private String name; // Nazwa serii czasowej
13 |
14 | public getMaximum() {}; // Zwraca największą wartość z serii
15 | public average() {}; // Zwraca średnią
16 | }
17 | ```
18 |
19 | ```java
20 | /***
21 | * Klasa ta reprezentuje serie czasową z danymi, nie posiadającą nazwy.
22 | */
23 | class AnonymousTimeSeries {
24 | private int[] data; // Dane w serii
25 |
26 | public getMaximum() {}; // Zwraca największą wartość z serii
27 | public average() {}; // Zwraca średnią
28 | }
29 | ```
30 |
31 | ## Wskazówki
32 | - Korzystaj z możliwości generowania kodu przez IntelliJ - ułatwia
33 | to w sposób znaczący pracę. Pamiętaj, że kod nie skompiluje się jeżeli metod nie będzie -
34 | natomiast jeżeli nie będą nic robić, jedyne co może się stać to zły wynik testu
35 | (albo zawieszenie się maszyny - z tym zawsze trzeba się liczyć 😉)
36 | - Uruchamiaj testy zawsze korzystając z opcji debug 🐛.
37 | Dzieki temu ławiej jest znaleźć i zrozumieć dlaczego program nie działa tak jak trzeba.
38 | Pamiętaj o możliwości stawiania breakpointów 🛑.
39 | - Pamiętaj o umiejscowieniu kodu w odpowiednim pakiecie.
40 | Najprościej, jeśli utowrzysz nowy projekt, dodasz plik z testem i pozwolisz `Alt+Enter`
41 | na nazwie pakietu wykonać swoją magię
42 |
43 | ## Jak skutecznie zabrać się za rozwiązanie zadania
44 | [Instrukcja ze zrzutami ekranu](https://github.com/Rughalt/mini-objective-java/wiki/Zadania-Punktowane)
45 |
46 | ## Powodzenia!
47 |
--------------------------------------------------------------------------------
/basic-arrays/src/mini/java/basic/arrays/test/TimeSeriesTest.java:
--------------------------------------------------------------------------------
1 | package mini.java.basic.arrays.test;
2 |
3 | import static org.junit.Assert.*;
4 | import static org.junit.Assert.assertTrue;
5 |
6 | public class TimeSeriesTest {
7 |
8 |
9 | /***
10 | * Prosty equals() - sprawdzenie dla identycznych
11 | * @difficulty 1
12 | */
13 | @org.junit.Test
14 | public void primitiveEquals() {
15 | TimeSeries timeSeries1 = new TimeSeries("TS1",1,2,3,4);
16 | int[] j = {1,2,3,4};
17 | TimeSeries timeSeries2 = new TimeSeries("TS1",j);
18 | assertFalse(timeSeries1 == timeSeries2);
19 | }
20 |
21 | /***
22 | * Prosty equals() - sprawdzenie dla różnych
23 | * @difficulty 1
24 | */
25 | @org.junit.Test
26 | public void equalsFalse() {
27 | TimeSeries timeSeries1 = new TimeSeries("TS1",1,2,3,4);
28 | int[] j = {1,2,3,4};
29 | TimeSeries timeSeries2 = new TimeSeries("TS2",j);
30 | assertNotEquals(timeSeries1, timeSeries2);
31 | }
32 |
33 | /***
34 | * Prosty equals() - sprawdzenie dla różnych
35 | * @difficulty 1
36 | */
37 | @org.junit.Test
38 | public void equalsFalseArray() {
39 | TimeSeries timeSeries1 = new TimeSeries("TS1",1,2,3,4);
40 | int[] j = {1,2,3};
41 | TimeSeries timeSeries2 = new TimeSeries("TS1",j);
42 | assertNotEquals(timeSeries1, timeSeries2);
43 | }
44 | /***
45 | * Prosty equals
46 | * @difficulty 1
47 | */
48 | @org.junit.Test
49 | public void equalsTrue() {
50 | TimeSeries timeSeries1 = new TimeSeries("TS1",1,2,3,4);
51 | int[] j = {1,2,3,4};
52 | TimeSeries timeSeries2 = new TimeSeries("TS1",j);
53 | assertEquals(timeSeries1, timeSeries2);
54 | }
55 |
56 | /***
57 | * Prosty equals - sprawdzenie dla nazwy *null*
58 | * @difficulty 1
59 | */
60 | @org.junit.Test
61 | public void equalsTrueNullName() {
62 | TimeSeries timeSeries1 = new TimeSeries(null,1,2,3,4);
63 | int[] j = {1,2,3,4};
64 | TimeSeries timeSeries2 = new TimeSeries(null,j);
65 | assertEquals(timeSeries1, timeSeries2);
66 | }
67 |
68 | /***
69 | * Prosty hashcode() - sprawdzenie czy generowane są identyczne
70 | * @difficulty 1
71 | */
72 | @org.junit.Test
73 | public void hashcodeEquals() {
74 | TimeSeries timeSeries1 = new TimeSeries("TS1",1,2,3,4);
75 | int[] j = {1,2,3,4};
76 | TimeSeries timeSeries2 = new TimeSeries("TS1",j);
77 | assertEquals(timeSeries1.hashCode(), timeSeries2.hashCode());
78 | }
79 |
80 | /***
81 | * Prosty hashcode() - sprawdzenie czy zmiana nazwy wpływa na hashcode()
82 | * @difficulty 1
83 | */
84 | @org.junit.Test
85 | public void hashcodeNotEqualsName() {
86 | TimeSeries timeSeries1 = new TimeSeries("TS1",1,2,3,4);
87 | int[] j = {1,2,3,4};
88 | TimeSeries timeSeries2 = new TimeSeries("TS2",j);
89 | assertNotEquals(timeSeries1.hashCode(), timeSeries2.hashCode());
90 | }
91 |
92 | /***
93 | * Prosty hashcode() - sprawdzenie czy zmiana danych serii wpływa na hashcode()
94 | * @difficulty 1
95 | */
96 | @org.junit.Test
97 | public void hashcodeNotEqualsValue() {
98 | TimeSeries timeSeries1 = new TimeSeries("TS1",1,2,3,4);
99 | int[] j = {1,2,3};
100 | TimeSeries timeSeries2 = new TimeSeries("TS1",j);
101 | assertNotEquals(timeSeries1.hashCode(), timeSeries2.hashCode());
102 | }
103 |
104 | /***
105 | * Sprawdzenie działania metody zmiennej _name_
106 | * @difficulty 1
107 | */
108 | @org.junit.Test
109 | public void averageTest() {
110 | TimeSeries timeSeries1 = new TimeSeries("TS1",1,2,3);
111 | TimeSeries timeSeries2 = new TimeSeries("TS1",4,2,3);
112 | assertEquals(2.0, timeSeries1.average(),0);
113 | assertEquals(3.0, timeSeries2.average(),0);
114 | }
115 |
116 | /***
117 | * Sprawdzenie gettera zmiennej _name_
118 | * @difficulty 1
119 | */
120 | @org.junit.Test
121 | public void getNameTest() {
122 | TimeSeries timeSeries1 = new TimeSeries("TS1",1,2,3);
123 | assertEquals(timeSeries1.getName(),"TS1");
124 | }
125 |
126 | /***
127 | * Sprawdzenie gettera zmiennej @name
128 | * @difficulty 1
129 | */
130 | @org.junit.Test
131 | public void getNameTestNull() {
132 | TimeSeries timeSeries1 = new TimeSeries(null,1,2,3);
133 | assertEquals(timeSeries1.getName(),null);
134 | }
135 |
136 | /***
137 | * Sprawdzenie metody getMaximum dla liczb ujemych
138 | * @difficulty 1
139 | */
140 | @org.junit.Test
141 | public void getMaximumTest() {
142 | TimeSeries timeSeries1 = new TimeSeries("TS1",1,2,3,5,6,1);
143 | assertEquals(timeSeries1.getMaximum(),6);
144 | }
145 |
146 | /***
147 | * Sprawdzenie metody getMaximum dla liczb ujemych
148 | * @difficulty 1
149 | */
150 | @org.junit.Test
151 | public void getMaximumTestNegative() {
152 | TimeSeries timeSeries1 = new TimeSeries("TS1",-1,-2,-3,-5,-6,-1,-11);
153 | assertEquals(timeSeries1.getMaximum(),-1);
154 | }
155 |
156 |
157 |
158 | /***
159 | * Sprawdzenie metody average klasy AnonymousTimeSeries
160 | * @difficulty 1
161 | */
162 | @org.junit.Test
163 | public void anonymousTimeSeriesAverageTst() {
164 | TimeSeries timeSeries1 = new AnonymousTimeSeries(1,2,3);
165 | assertEquals(2.0, timeSeries1.average(),0);
166 | }
167 | /***
168 | * Sprawdzenie getter pola name klasy AnonymousTimeSeries
169 | * @difficulty 1
170 | */
171 | @org.junit.Test
172 | public void anonymousTimeSeriesNameTest() {
173 | TimeSeries timeSeries1 = new AnonymousTimeSeries(5,6);
174 | assertNull(timeSeries1.getName());
175 | }
176 |
177 | /***
178 | * Sprawdzenie metody equals klasy AnonymousTimeSeries
179 | * @difficulty 1
180 | */
181 | @org.junit.Test
182 | public void anonymousTimeSeriesEqualityTest() {
183 | TimeSeries timeSeries1 = new AnonymousTimeSeries(5,4,3);
184 | TimeSeries timeSeries2 = new AnonymousTimeSeries(5,4,3);
185 | assertEquals(timeSeries1, timeSeries2);
186 | assertEquals(timeSeries2, timeSeries1);
187 | }
188 |
189 | /***
190 | * Sprawdzenie metody equals klasy AnonymousTimeSeries wględem klasy bazowej TimeSeries
191 | * @difficulty 1
192 | */
193 | @org.junit.Test
194 | public void anonymousTimeSeriesEqualityTestAgainstBase() {
195 | TimeSeries timeSeries1 = new AnonymousTimeSeries(5,4,3);
196 | TimeSeries timeSeries2 = new TimeSeries("anonymous", 5,4,3);
197 | assertNotEquals(timeSeries1, timeSeries2);
198 | assertNotEquals(timeSeries2, timeSeries1);
199 | }
200 |
201 | /***
202 | * Sprawdzenie metody average klasy AnonymousTimeSeries wględem klasy bazowej gdzie nazwa jest Null
203 | * @difficulty 1
204 | */
205 | @org.junit.Test
206 | public void anonymousTimeSeriesEqualityTestAgainstBaseWithNull() {
207 | TimeSeries timeSeries1 = new AnonymousTimeSeries(5,4,3);
208 | TimeSeries timeSeries2 = new TimeSeries(null, 5,4,3);
209 | assertNotEquals(timeSeries1, timeSeries2);
210 | assertNotEquals(timeSeries2, timeSeries1);
211 | }
212 |
213 | /***
214 | * Sprawdzenie metody toString klasy AnonymousTimeSeries - nie powinna zawierać pola name, ale powinna zawierać wartości
215 | * @difficulty 1
216 | */
217 | @org.junit.Test
218 | public void anonymousTimeSeriesToStringNoName() {
219 | TimeSeries timeSeries2 = new AnonymousTimeSeries(5,4,3);
220 | assertTrue(!timeSeries2.toString().toLowerCase().contains("name=")
221 | && timeSeries2.toString().toLowerCase().contains("5")
222 | && timeSeries2.toString().toLowerCase().contains("4")
223 | && timeSeries2.toString().toLowerCase().contains("3"));
224 | }
225 |
226 | /***
227 | * Sprawdzenie metody toString klasy TimeSeries - powinna zawierać pole name i zawierać wartości
228 | * @difficulty 1
229 | */
230 | @org.junit.Test
231 | public void timeSeriesToStringName() {
232 | TimeSeries timeSeries2 = new TimeSeries("anonymous", 5,4,3);
233 | assertTrue(timeSeries2.toString().toLowerCase().contains("name=")
234 | && timeSeries2.toString().toLowerCase().contains("5")
235 | && timeSeries2.toString().toLowerCase().contains("4")
236 | && timeSeries2.toString().toLowerCase().contains("3"));
237 | }
238 |
239 | /***
240 | * Sprawdzenie metody isAnonymous() na klasie bazowej TimeSeries
241 | * @difficulty 1
242 | */
243 | @org.junit.Test
244 | public void isAnonymousBaseClass() {
245 | TimeSeries timeSeries1 = new TimeSeries("TS1",1,2,3);
246 | assertFalse(timeSeries1.isAnonymous());
247 | }
248 |
249 | /***
250 | * Sprawdzenie metody isAnonymous() na klasie AnonymousTimeSeries rzutowanej na TimeSeries
251 | * @difficulty 1
252 | */
253 | @org.junit.Test
254 | public void isAnonymousInheritedClass() {
255 | TimeSeries timeSeries1 = new AnonymousTimeSeries(5);
256 | assertTrue(timeSeries1.isAnonymous());
257 | }
258 |
259 | }
260 |
--------------------------------------------------------------------------------
/basic-arrays/src/mini/java/basic/arrays/testsolution/AnonymousTimeSeries.java:
--------------------------------------------------------------------------------
1 | package mini.java.basic.arrays.testsolution;
2 |
3 | import java.util.Arrays;
4 |
5 | public class AnonymousTimeSeries extends TimeSeries {
6 | public AnonymousTimeSeries(int... data) {
7 | super(null, data);
8 | }
9 |
10 | @Override
11 | public String toString() {
12 | return "AnonymousTimeSeries{" +
13 | "data=" + Arrays.toString(data) +
14 | '}';
15 | }
16 |
17 | @Override
18 | public boolean isAnonymous() {
19 | return true;
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/basic-arrays/src/mini/java/basic/arrays/testsolution/TimeSeries.java:
--------------------------------------------------------------------------------
1 | package mini.java.basic.arrays.testsolution;
2 |
3 | import java.util.Arrays;
4 | import java.util.Objects;
5 |
6 | public class TimeSeries {
7 | private final String name;
8 | protected final int[] data;
9 |
10 | public TimeSeries(String name, int... data) {
11 | this.name = name;
12 | this.data = data;
13 | }
14 |
15 | public double average() {
16 | double sum = 0.0;
17 | for (int i = 0; i < data.length; i++) {
18 | sum+=data[i];
19 | }
20 | return sum/data.length;
21 | }
22 |
23 | public int getMaximum() {
24 | int maxValue = Integer.MIN_VALUE;
25 | for (int i = 0; i < data.length; i++) {
26 | if (data[i] > maxValue) maxValue = data[i];
27 | }
28 | return maxValue;
29 | }
30 |
31 | public String getName() {
32 | return name;
33 | }
34 |
35 | public int[] getData() {
36 | return data;
37 | }
38 |
39 | public boolean isAnonymous() {
40 | return false ;
41 | }
42 |
43 | @Override
44 | public boolean equals(Object o) {
45 | if (this == o) return true;
46 | if (o == null || getClass() != o.getClass()) return false;
47 | TimeSeries that = (TimeSeries) o;
48 | return Objects.equals(name, that.name) &&
49 | Arrays.equals(data, that.data);
50 | }
51 |
52 | @Override
53 | public int hashCode() {
54 | int result = Objects.hash(name);
55 | result = 31 * result + Arrays.hashCode(data);
56 | return result;
57 | }
58 |
59 | @Override
60 | public String toString() {
61 | return "TimeSeries{" +
62 | "name='" + name + '\'' +
63 | ", data=" + Arrays.toString(data) +
64 | '}';
65 | }
66 | }
67 |
--------------------------------------------------------------------------------
/basic-arrays/src/mini/java/basic/arrays/testsolution/TimeSeriesTest.java:
--------------------------------------------------------------------------------
1 | package mini.java.basic.arrays.testsolution;
2 |
3 | import static org.junit.Assert.*;
4 |
5 | public class TimeSeriesTest {
6 |
7 |
8 | /***
9 | * Prosty equals() - sprawdzenie dla identycznych
10 | * @difficulty 1
11 | */
12 | @org.junit.Test
13 | public void primitiveEquals() {
14 | TimeSeries timeSeries1 = new TimeSeries("TS1",1,2,3,4);
15 | int[] j = {1,2,3,4};
16 | TimeSeries timeSeries2 = new TimeSeries("TS1",j);
17 | assertFalse(timeSeries1 == timeSeries2);
18 | }
19 |
20 | /***
21 | * Prosty equals() - sprawdzenie dla różnych
22 | * @difficulty 1
23 | */
24 | @org.junit.Test
25 | public void equalsFalse() {
26 | TimeSeries timeSeries1 = new TimeSeries("TS1",1,2,3,4);
27 | int[] j = {1,2,3,4};
28 | TimeSeries timeSeries2 = new TimeSeries("TS2",j);
29 | assertNotEquals(timeSeries1, timeSeries2);
30 | }
31 |
32 | /***
33 | * Prosty equals() - sprawdzenie dla różnych
34 | * @difficulty 1
35 | */
36 | @org.junit.Test
37 | public void equalsFalseArray() {
38 | TimeSeries timeSeries1 = new TimeSeries("TS1",1,2,3,4);
39 | int[] j = {1,2,3};
40 | TimeSeries timeSeries2 = new TimeSeries("TS1",j);
41 | assertNotEquals(timeSeries1, timeSeries2);
42 | }
43 | /***
44 | * Prosty equals
45 | * @difficulty 1
46 | */
47 | @org.junit.Test
48 | public void equalsTrue() {
49 | TimeSeries timeSeries1 = new TimeSeries("TS1",1,2,3,4);
50 | int[] j = {1,2,3,4};
51 | TimeSeries timeSeries2 = new TimeSeries("TS1",j);
52 | assertEquals(timeSeries1, timeSeries2);
53 | }
54 |
55 | /***
56 | * Prosty equals - sprawdzenie dla nazwy *null*
57 | * @difficulty 1
58 | */
59 | @org.junit.Test
60 | public void equalsTrueNullName() {
61 | TimeSeries timeSeries1 = new TimeSeries(null,1,2,3,4);
62 | int[] j = {1,2,3,4};
63 | TimeSeries timeSeries2 = new TimeSeries(null,j);
64 | assertEquals(timeSeries1, timeSeries2);
65 | }
66 |
67 | /***
68 | * Prosty hashcode() - sprawdzenie czy generowane są identyczne
69 | * @difficulty 1
70 | */
71 | @org.junit.Test
72 | public void hashcodeEquals() {
73 | TimeSeries timeSeries1 = new TimeSeries("TS1",1,2,3,4);
74 | int[] j = {1,2,3,4};
75 | TimeSeries timeSeries2 = new TimeSeries("TS1",j);
76 | assertEquals(timeSeries1.hashCode(), timeSeries2.hashCode());
77 | }
78 |
79 | /***
80 | * Prosty hashcode() - sprawdzenie czy zmiana nazwy wpływa na hashcode()
81 | * @difficulty 1
82 | */
83 | @org.junit.Test
84 | public void hashcodeNotEqualsName() {
85 | TimeSeries timeSeries1 = new TimeSeries("TS1",1,2,3,4);
86 | int[] j = {1,2,3,4};
87 | TimeSeries timeSeries2 = new TimeSeries("TS2",j);
88 | assertNotEquals(timeSeries1.hashCode(), timeSeries2.hashCode());
89 | }
90 |
91 | /***
92 | * Prosty hashcode() - sprawdzenie czy zmiana danych serii wpływa na hashcode()
93 | * @difficulty 1
94 | */
95 | @org.junit.Test
96 | public void hashcodeNotEqualsValue() {
97 | TimeSeries timeSeries1 = new TimeSeries("TS1",1,2,3,4);
98 | int[] j = {1,2,3};
99 | TimeSeries timeSeries2 = new TimeSeries("TS1",j);
100 | assertNotEquals(timeSeries1.hashCode(), timeSeries2.hashCode());
101 | }
102 |
103 | /***
104 | * Sprawdzenie działania metody zmiennej _name_
105 | * @difficulty 1
106 | */
107 | @org.junit.Test
108 | public void averageTest() {
109 | TimeSeries timeSeries1 = new TimeSeries("TS1",1,2,3);
110 | TimeSeries timeSeries2 = new TimeSeries("TS1",4,2,3);
111 | assertEquals(2.0, timeSeries1.average(),0);
112 | assertEquals(3.0, timeSeries2.average(),0);
113 | }
114 |
115 | /***
116 | * Sprawdzenie gettera zmiennej _name_
117 | * @difficulty 1
118 | */
119 | @org.junit.Test
120 | public void getNameTest() {
121 | TimeSeries timeSeries1 = new TimeSeries("TS1",1,2,3);
122 | assertEquals(timeSeries1.getName(),"TS1");
123 | }
124 |
125 | /***
126 | * Sprawdzenie gettera zmiennej @name
127 | * @difficulty 1
128 | */
129 | @org.junit.Test
130 | public void getNameTestNull() {
131 | TimeSeries timeSeries1 = new TimeSeries(null,1,2,3);
132 | assertEquals(timeSeries1.getName(),null);
133 | }
134 |
135 | /***
136 | * Sprawdzenie metody getMaximum dla liczb ujemych
137 | * @difficulty 1
138 | */
139 | @org.junit.Test
140 | public void getMaximumTest() {
141 | TimeSeries timeSeries1 = new TimeSeries("TS1",1,2,3,5,6,1);
142 | assertEquals(timeSeries1.getMaximum(),6);
143 | }
144 |
145 | /***
146 | * Sprawdzenie metody getMaximum dla liczb ujemych
147 | * @difficulty 1
148 | */
149 | @org.junit.Test
150 | public void getMaximumTestNegative() {
151 | TimeSeries timeSeries1 = new TimeSeries("TS1",-1,-2,-3,-5,-6,-1,-11);
152 | assertEquals(timeSeries1.getMaximum(),-1);
153 | }
154 |
155 |
156 |
157 | /***
158 | * Sprawdzenie metody average klasy AnonymousTimeSeries
159 | * @difficulty 1
160 | */
161 | @org.junit.Test
162 | public void anonymousTimeSeriesAverageTst() {
163 | TimeSeries timeSeries1 = new AnonymousTimeSeries(1,2,3);
164 | assertEquals(2.0, timeSeries1.average(),0);
165 | }
166 | /***
167 | * Sprawdzenie getter pola name klasy AnonymousTimeSeries
168 | * @difficulty 1
169 | */
170 | @org.junit.Test
171 | public void anonymousTimeSeriesNameTest() {
172 | TimeSeries timeSeries1 = new AnonymousTimeSeries(5,6);
173 | assertNull(timeSeries1.getName());
174 | }
175 |
176 | /***
177 | * Sprawdzenie metody equals klasy AnonymousTimeSeries
178 | * @difficulty 1
179 | */
180 | @org.junit.Test
181 | public void anonymousTimeSeriesEqualityTest() {
182 | TimeSeries timeSeries1 = new AnonymousTimeSeries(5,4,3);
183 | TimeSeries timeSeries2 = new AnonymousTimeSeries(5,4,3);
184 | assertEquals(timeSeries1, timeSeries2);
185 | assertEquals(timeSeries2, timeSeries1);
186 | }
187 |
188 | /***
189 | * Sprawdzenie metody equals klasy AnonymousTimeSeries wględem klasy bazowej TimeSeries
190 | * @difficulty 1
191 | */
192 | @org.junit.Test
193 | public void anonymousTimeSeriesEqualityTestAgainstBase() {
194 | TimeSeries timeSeries1 = new AnonymousTimeSeries(5,4,3);
195 | TimeSeries timeSeries2 = new TimeSeries("anonymous", 5,4,3);
196 | assertNotEquals(timeSeries1, timeSeries2);
197 | assertNotEquals(timeSeries2, timeSeries1);
198 | }
199 |
200 | /***
201 | * Sprawdzenie metody average klasy AnonymousTimeSeries wględem klasy bazowej gdzie nazwa jest Null
202 | * @difficulty 1
203 | */
204 | @org.junit.Test
205 | public void anonymousTimeSeriesEqualityTestAgainstBaseWithNull() {
206 | TimeSeries timeSeries1 = new AnonymousTimeSeries(5,4,3);
207 | TimeSeries timeSeries2 = new TimeSeries(null, 5,4,3);
208 | assertNotEquals(timeSeries1, timeSeries2);
209 | assertNotEquals(timeSeries2, timeSeries1);
210 | }
211 |
212 | /***
213 | * Sprawdzenie metody toString klasy AnonymousTimeSeries - nie powinna zawierać pola name, ale powinna zawierać wartości
214 | * @difficulty 1
215 | */
216 | @org.junit.Test
217 | public void anonymousTimeSeriesToStringNoName() {
218 | TimeSeries timeSeries2 = new AnonymousTimeSeries(5,4,3);
219 | assertTrue(!timeSeries2.toString().toLowerCase().contains("name=")
220 | && timeSeries2.toString().toLowerCase().contains("5")
221 | && timeSeries2.toString().toLowerCase().contains("4")
222 | && timeSeries2.toString().toLowerCase().contains("3"));
223 | }
224 |
225 | /***
226 | * Sprawdzenie metody toString klasy TimeSeries - powinna zawierać pole name i zawierać wartości
227 | * @difficulty 1
228 | */
229 | @org.junit.Test
230 | public void timeSeriesToStringName() {
231 | TimeSeries timeSeries2 = new TimeSeries("anonymous", 5,4,3);
232 | assertTrue(timeSeries2.toString().toLowerCase().contains("name=")
233 | && timeSeries2.toString().toLowerCase().contains("5")
234 | && timeSeries2.toString().toLowerCase().contains("4")
235 | && timeSeries2.toString().toLowerCase().contains("3"));
236 | }
237 |
238 | /***
239 | * Sprawdzenie metody isAnonymous() na klasie bazowej TimeSeries
240 | * @difficulty 1
241 | */
242 | @org.junit.Test
243 | public void isAnonymousBaseClass() {
244 | TimeSeries timeSeries1 = new TimeSeries("TS1",1,2,3);
245 | assertFalse(timeSeries1.isAnonymous());
246 | }
247 |
248 | /***
249 | * Sprawdzenie metody isAnonymous() na klasie AnonymousTimeSeries rzutowanej na TimeSeries
250 | * @difficulty 1
251 | */
252 | @org.junit.Test
253 | public void isAnonymousInheritedClass() {
254 | TimeSeries timeSeries1 = new AnonymousTimeSeries(5);
255 | assertTrue(timeSeries1.isAnonymous());
256 | }
257 |
258 | }
259 |
--------------------------------------------------------------------------------
/basic-collections/basic-collections.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/basic-collections/dataset.csv:
--------------------------------------------------------------------------------
1 | products;1;Eggs;0.29;true
2 | products;2;Sugar;1.99;true
3 | products;3;Milk;1.09;true
4 | products;4;Honey;2.99;false
5 | products;5;Mascarpone;1.99;true
6 | products;6;Tomato;3.99;true
7 | products;7;Printer Paper;2.99;false
8 | products;8;Printer Toner;12.99;false
9 | products;9;Thermal Paste;1.99;true)
10 | warehouses;1;TX;false;7,8,9;
11 | warehouses;2;AU;true;1,2,3,4,5,6;
12 | warehouses;3;CA;true;;
--------------------------------------------------------------------------------
/basic-collections/dataset_empty_product.csv:
--------------------------------------------------------------------------------
1 | warehouses;2;AU;true;1,2,3,4,5,6;
2 | warehouses;3;CA;true;;
--------------------------------------------------------------------------------
/basic-collections/dataset_malformed_product.csv:
--------------------------------------------------------------------------------
1 | products;1;Eggs;0.29;true
2 | products;2;Sugar;1.99;true
3 | products;3;Milk;1.09;true
4 | products;4;Honey;2.99;false
5 | products;5;Mascarpone;1.99;true
6 | products;6;Tomato;3.99;true
7 | products;7;Printer Paper;2.99;false
8 | products;8;Printer Toner;12.99;false
9 | products;9;Thermal Paste;hwaiaw4uyci4y
10 | warehouses;2;AU;true;1,2,3,4,5,6;
11 | warehouses;3;CA;true;;
--------------------------------------------------------------------------------
/basic-collections/dataset_malformed_warehouse.csv:
--------------------------------------------------------------------------------
1 | products;1;Eggs;0.29;true
2 | products;2;Sugar;1.99;true
3 | products;3;Milk;1.09;true
4 | products;4;Honey;2.99;false
5 | products;5;Mascarpone;1.99;true
6 | products;6;Tomato;3.99;true
7 | products;7;Printer Paper;2.99;false
8 | products;8;Printer Toner;12.99;false
9 | warehouses;1;TX;false;wololol;
10 | warehouses;2;AU;true;1,2,3,4,5,6;
11 | warehouses;3;CA;true;;
--------------------------------------------------------------------------------
/basic-collections/src/mini/java/basic/collections/CollectionsTest.java:
--------------------------------------------------------------------------------
1 | package mini.java.basic.collections;
2 |
3 | import java.util.*;
4 | import java.util.stream.Collectors;
5 |
6 | import static org.junit.Assert.*;
7 | import static org.junit.Assert.assertEquals;
8 |
9 | public class CollectionsTest {
10 |
11 |
12 | @org.junit.Test
13 | public void listAdd() {
14 | List l = new ArrayList<>();
15 | l.add("a");
16 | l.addAll(List.of("b","c"));
17 | assertEquals(l, List.of("a","b","c"));
18 | }
19 |
20 | @org.junit.Test
21 | public void listRemove() {
22 | List list = new ArrayList<>(List.of("a", "b", "b"));
23 | boolean removed = list.remove("c");
24 | assertEquals(list, List.of("a","b","b"));
25 | assertFalse(removed);
26 | }
27 |
28 | @org.junit.Test
29 | public void listRemoveDuplicated() {
30 | List list = new ArrayList<>(List.of("a", "b", "b"));
31 | boolean removed = list.remove("b");
32 | assertEquals(list, List.of("a","b"));
33 | assertTrue(removed);
34 | }
35 |
36 | @org.junit.Test
37 | public void listRemoveAll() {
38 | List list = new ArrayList<>(List.of("a", "b", "b"));
39 | while (list.remove("b")) { }
40 | assertEquals(list, List.of("a"));
41 | }
42 |
43 | @org.junit.Test
44 | public void listRemoveAllStream() {
45 | List list = new ArrayList<>(List.of("a", "b", "b"));
46 | List l = list.stream()
47 | .filter(element -> !element.equals("b"))
48 | .collect(Collectors.toList());
49 | List l2 = new ArrayList<>();
50 |
51 | assertEquals(l, List.of("a"));
52 | }
53 |
54 | @org.junit.Test
55 | public void listSort() {
56 | List l = new ArrayList<>();
57 | l.add("c");
58 | l.addAll(List.of("b","a"));
59 | l.sort(Comparator.naturalOrder());
60 | assertEquals(l, List.of("a","b","c"));
61 | }
62 |
63 | @org.junit.Test
64 | public void setAdd() {
65 | Set linkedHashSet = new LinkedHashSet<>(List.of("a", "b", "d"));
66 | Set hashSet = new HashSet<>(List.of("a", "b", "d"));
67 | System.out.print("Hashset: ");
68 | hashSet.forEach(s -> System.out.printf("%s,", s));
69 | System.out.println();
70 | System.out.print("LinkedHashSet: ");
71 | for (String s1 : linkedHashSet) {
72 | System.out.printf("%s,", s1);
73 | }
74 | System.out.println();
75 | hashSet.add("c");
76 | linkedHashSet.add("c");
77 | hashSet.add("d");
78 | linkedHashSet.add("d");
79 | System.out.print("Hashset: ");
80 | hashSet.forEach(s1 -> System.out.printf("%s,", s1));
81 | System.out.println();
82 | System.out.print("LinkedHashSet: ");
83 | linkedHashSet.forEach(s -> System.out.printf("%s,", s));
84 | }
85 |
86 |
87 |
88 | @org.junit.Test
89 | public void mapPut() {
90 | Map hashMap = new HashMap<>();
91 | hashMap.put("a","string a");
92 | hashMap.put("a","string b");
93 | assertEquals(hashMap.get("a"),"string b");
94 |
95 | hashMap.putIfAbsent("a","string c");
96 | assertEquals(hashMap.get("a"),"string b");
97 | }
98 |
99 | @org.junit.Test
100 | public void mapGet() {
101 | Map hashMap = new HashMap<>();
102 | hashMap.put("a","string a");
103 | hashMap.put("b","string b");
104 |
105 | assertEquals(hashMap.get("a"),"string a");
106 | assertFalse(hashMap.containsKey("c"));
107 | assertEquals(hashMap.getOrDefault("c","trelemorele"),"trelemorele");
108 | }
109 |
110 | @org.junit.Test
111 | public void mapComplexType() {
112 | Map hashMap = new HashMap<>();
113 | hashMap.put(String.class, new StringPrinter());
114 | hashMap.put(Integer.class, new IntegerPrinter());
115 | hashMap.put(Number.class, new NumberPrinter());
116 |
117 |
118 | Integer a = 3;
119 | hashMap.getOrDefault(a.getClass(), new DefaultLogger()).print(a);
120 | Object b = new String("3");
121 | hashMap.getOrDefault(b.getClass(), new DefaultLogger()).print(b);
122 | Object c = new ArrayList<>();
123 | hashMap.getOrDefault(c.getClass(), new DefaultLogger()).print(c);
124 |
125 | Double d = 3.0;
126 | Printer printer = hashMap.get(d.getClass());
127 | if (printer != null) {
128 | printer.print(d);
129 | }
130 | }
131 |
132 | private interface Printer {
133 | void print(T object);
134 | }
135 |
136 | private class StringPrinter implements Printer {
137 | @Override
138 | public void print(String v) {
139 | System.out.println("String: "+ v);
140 | }
141 | }
142 |
143 | private class IntegerPrinter implements Printer {
144 | @Override
145 | public void print(Integer v) {
146 | System.out.println("Integer: "+ v);
147 | }
148 | }
149 |
150 | private class NumberPrinter implements Printer {
151 | @Override
152 | public void print(Number v) {
153 | System.out.println("Number: "+ v);
154 | }
155 | }
156 |
157 |
158 | private class DefaultLogger implements Printer