Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
55d29ff
[Refactor] Fix on Assignment 05
mikeleo03 Jun 24, 2024
77f0bea
[Refactor] Fix on Assignment 06
mikeleo03 Jun 24, 2024
05d249e
Merge pull request #1 from affandyfandy/Week_02
mikeleo03 Jul 8, 2024
cce75e5
[Feat] Product Module
mikeleo03 Aug 12, 2024
49743bb
[Feat] Customer module
mikeleo03 Aug 12, 2024
0d3ef49
[Refactor] Product module adjustment
mikeleo03 Aug 12, 2024
5f3113e
[Refactor] Major refactor over UUID
mikeleo03 Aug 12, 2024
99819d5
[Docs] Feat code documentation
mikeleo03 Aug 12, 2024
40bef76
[Feat] API Gateway implementation
mikeleo03 Aug 12, 2024
ffc3178
[Feat] README for Assignment 01
mikeleo03 Aug 12, 2024
8876d93
[Refactor] Refine README.md
mikeleo03 Aug 12, 2024
8ed82ac
[Init] Migrate project from Asisgnment 01 to 02
mikeleo03 Aug 13, 2024
96b8514
[Feat] Authentication service
mikeleo03 Aug 13, 2024
7024f7d
[Refactor] Change return to boolean
mikeleo03 Aug 13, 2024
9faa91b
[Feat] AuthClient and FilterFactory
mikeleo03 Aug 13, 2024
ad7c0d7
[Feat] README for Assignment 02
mikeleo03 Aug 13, 2024
d52dc0e
[Feat] Some assets of explanation
mikeleo03 Aug 13, 2024
0b22eb3
[Refactor] Image bigger redirection
mikeleo03 Aug 13, 2024
c6b9034
[Fix] Minor README bug
mikeleo03 Aug 13, 2024
d5ce913
[Init] Initial commit for new discovery services
mikeleo03 Aug 15, 2024
2c8733f
[Feat] Navigating discovery
mikeleo03 Aug 15, 2024
7863d97
[Refactor] Make Auth service comply
mikeleo03 Aug 15, 2024
77efa62
[Refactor] Make Product service comply
mikeleo03 Aug 15, 2024
32a9bf7
[Refactor] Make Customer service comply
mikeleo03 Aug 15, 2024
ca3dcd0
[Refactor] Make Gateway service comply
mikeleo03 Aug 15, 2024
42dd6e4
[Refactor] Modifying AuthClient and ProductClient to do WebClient
mikeleo03 Aug 15, 2024
185c240
[Feat] README and full documentation
mikeleo03 Aug 16, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
5 changes: 4 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1 +1,4 @@
target
target
HELP.md
env.properties
.vscode
14 changes: 9 additions & 5 deletions Week 02/Lecture 03/Assignment 05/ListToMap.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.TreeMap;

// Assume Employee class with fields: int employeeID, String name, String department
class Employee {
Expand Down Expand Up @@ -46,11 +46,15 @@ public static void main(String[] args) {
new Employee(3, "Charlie", "Finance")
);

// Convert List to Map using employeeID as key
Map<Integer, Employee> employeeMap = employees.stream()
.collect(Collectors.toMap(Employee::getEmployeeID, emp -> emp));
// Creating employeeMap using TreeMap
Map<Integer, String> employeesMap = new TreeMap<>();

// Convert List to Map
for (Employee emp : employees){
employeesMap.put(emp.getEmployeeID(), emp.getName());
}

// Print the resulting Map
employeeMap.forEach((id, emp) -> System.out.println("Employee ID: " + id + ", Employee: " + emp));
employeesMap.forEach((id, emp) -> System.out.println("Employee ID: " + id + ", Employee: " + emp));
}
}
14 changes: 12 additions & 2 deletions Week 02/Lecture 03/Assignment 05/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ To remove duplicate lines from a file:
4. **Writing Unique Lines**: Write only those lines to a new file that haven't been seen before (not in the `HashSet`).

#### 📋 Case CSV Content
In this program, i use CSV file [`input.csv`](/Week%2002%20-%20Jun%2017-21/Lecture%2003/Assignment%205/data/input.csv) with content like this.
In this program, i use CSV file [`input.csv`](/Week%2002/Lecture%2003/Assignment%2005/RemoveDuplicates.java) with content like this.
```csv
employeeID,name,department
1,Alice,HR
Expand All @@ -106,6 +106,16 @@ Detail implementation is written on [this code](/Week%2002%20-%20Jun%2017-21/Lec

The output of the program shows on this [`output.csv`](/Week%2002%20-%20Jun%2017-21/Lecture%2003/Assignment%205/data/output.csv)

Here is how to run the updated code of program
```bash
$ java RemoveDuplicates <inputFile> <outputFile> <keyFieldIndex>
```

for example.
```bash
java RemoveDuplicates data/input.csv data/output.csv 0
```

<br>

### 🖨️ Task 4 - Get a Shallow Copy of a `HashMap`
Expand Down Expand Up @@ -166,7 +176,7 @@ Here i implement class `BankAccount` and `BankAccountDemo`.
3. **Use Java Streams for Transformation**: Utilize Java Streams API to transform the `List` into a `Map`.
4. **Collect into Map**: Use the `Collectors.toMap()` method to collect elements of the `List` into a `Map` using the specified key and value mappings.

Detail implementation is written on [this code](/Week%2002%20-%20Jun%2017-21/Lecture%2003/Assignment%205/ListToMap.java), and the output of the program shows like this.
Detail implementation is written on [this code](/Week%2002/Lecture%2003/Assignment%2005/ListToMap.java), and the output of the program shows like this (updated based on comment).

![Screenshot](img/Task5.png)

Expand Down
70 changes: 56 additions & 14 deletions Week 02/Lecture 03/Assignment 05/RemoveDuplicates.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,29 +3,42 @@
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class RemoveDuplicates {
public static void main(String[] args) {
String inputFileName = "data/input.csv";
String outputFileName = "data/output.csv";
String delimiter = ","; // Parse CSV format

// Set to store unique keys (employeeID in this case)
if (args.length < 3) {
System.out.println("Usage: java RemoveDuplicates <inputFile> <outputFile> <keyFieldIndex>");
return;
}

String inputFileName = args[0];
String outputFileName = args[1];
int keyFieldIndex;
try {
keyFieldIndex = Integer.parseInt(args[2]);
} catch (NumberFormatException e) {
System.out.println("Invalid keyFieldIndex. It must be an integer.");
return;
}

// Set to store unique keys
Set<String> seenKeys = new HashSet<>();

try (BufferedReader reader = new BufferedReader(new FileReader(inputFileName));
PrintWriter writer = new PrintWriter(new FileWriter(outputFileName))) {

String line;
while ((line = reader.readLine()) != null) {
// Split the line into fields
String[] fields = line.split(delimiter);
// Ensure there are enough fields and key field is valid
if (fields.length > 1) {
String key = fields[0]; // Assuming employeeID is the first field
// Properly split the line respecting quoted commas
String[] fields = parseCsvLine(line);

// Ensure key field index is valid
if (fields.length > keyFieldIndex) {
String key = fields[keyFieldIndex];
if (!seenKeys.contains(key)) {
seenKeys.add(key); // Add the key to set (marks as seen)
writer.println(line); // Write the line to output
Expand All @@ -36,7 +49,36 @@ public static void main(String[] args) {
System.out.println("Duplicates removed successfully. Output written to " + outputFileName);

} catch (IOException e) {
System.out.println("I/O Error occured:" + e);
System.out.println("I/O Error occurred: " + e);
}
}
}

// Function to parse CSV line while handling commas within quotes
private static String[] parseCsvLine(String line) {
boolean inQuotes = false;
StringBuilder field = new StringBuilder();
List<String> fields = new ArrayList<>();

for (char c : line.toCharArray()) {
switch (c) {
case '"':
inQuotes = !inQuotes; // Toggle the inQuotes flag
break;
case ',':
if (inQuotes) {
field.append(c); // Inside quotes, include comma
} else {
fields.add(field.toString());
field.setLength(0); // Reset the field buffer
}
break;
default:
field.append(c); // Add character to field buffer
break;
}
}
fields.add(field.toString()); // Add last field

return fields.toArray(new String[0]);
}
}
Binary file modified Week 02/Lecture 03/Assignment 05/img/Task5.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
21 changes: 16 additions & 5 deletions Week 02/Lecture 04/Assignment 06/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -119,11 +119,22 @@ Here’s a detailed process on how to remove duplicate lines from files based on
4. **Write the Output**: Write the processed, duplicate-free data to a new file.

#### 👨🏻‍💻 Implementation
Detail implementation is written on [this code](/Week%2002%20-%20Jun%2017-21/Lecture%2004/Assignment%206/RemoveDuplicatesCSV.java). Here’s what the program actually done.
1. **Read All Lines**: `Files.readAllLines(Paths.get(inputFilePath))` reads the CSV file into a list of strings.
2. **Extract Header**: The first line is treated as the header to determine the key field's index.
3. **Stream Processing**: The stream skips the header, then collects lines into a map using the key field (`id`). If a duplicate key is found, the first occurrence is retained.
4. **Write Results**: The header is re-added, and the list is written to the new file.
Detail implementation is written on [this code](/Week%2002/Lecture%2004/Assignment%2006/RemoveDuplicatesCSV.java). Here’s what the program actually done (updated based on comment).
1. **Initialize Readers and Writers**
- `BufferedReader` is used to read the input CSV file line by line.
- `BufferedWriter` is used to write the unique lines to the output CSV file.
2. **Extract and Write Header**
- The first line, which is the header, is read using `reader.readLine()`.
- This header is written immediately to the output file using `writer.write(header)`.
3. **Determine Key Field Index**
- The header is split to determine the index of the key field (`id`).
- This is done by iterating through the headers to find the matching field.
4. **Stream Processing and Duplicate Removal**
- A `Set<String>` is used to keep track of the keys that have already been processed.
- For each subsequent line, the key field's value is checked against the `Set`. If the key is unique, the line is written to the output file.
5. **Read and Write Lines**
- The program continues to read each line from the input file, splits it to get the key field, and checks the key against the `Set`.
- If the key is not in the `Set`, the line is written to the output file and the key is added to the `Set`.

**Best Practices Highlighted**
1. **`BufferedReader` for Large Files**: Using `BufferedReader` with `lines()` streams data efficiently.
Expand Down
65 changes: 37 additions & 28 deletions Week 02/Lecture 04/Assignment 06/RemoveDuplicatesCSV.java
Original file line number Diff line number Diff line change
@@ -1,46 +1,55 @@
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import java.util.HashSet;
import java.util.Set;

public class RemoveDuplicatesCSV {
public static void main(String[] args) {
String inputFilePath = "data/data.csv";
String outputFilePath = "data/unique.csv";
String keyFieldName = "id";

try (BufferedReader reader = Files.newBufferedReader(Paths.get(inputFilePath))) {
List<String> lines = reader.lines().collect(Collectors.toList());
if (lines.isEmpty()) return;
try (BufferedReader reader = Files.newBufferedReader(Paths.get(inputFilePath));
BufferedWriter writer = Files.newBufferedWriter(Paths.get(outputFilePath))) {

String header = reader.readLine();
if (header == null) return;

// Extract header and determine the key field index
String header = lines.get(0);
List<String> headers = Arrays.asList(header.split(","));
int keyIndex = headers.indexOf(keyFieldName);
if (keyIndex == -1) throw new IllegalArgumentException("Invalid key field name");
// Write header to the output file
writer.write(header);
writer.newLine();

// Process lines and remove duplicates based on the key field
List<String> uniqueLines = lines.stream()
.skip(1) // Skip header
.collect(Collectors.toMap(
line -> line.split(",")[keyIndex], // Use the key field
line -> line, // Use the line as value
(existing, replacement) -> existing // Keep the first occurrence
))
.values()
.stream()
.collect(Collectors.toList());
// Determine the key field index
String[] headers = header.split(",");
int keyIndex = -1;
for (int i = 0; i < headers.length; i++) {
if (headers[i].trim().equals(keyFieldName)) {
keyIndex = i;
break;
}
}
if (keyIndex == -1) throw new IllegalArgumentException("Invalid key field name");

// Add header back to the list
uniqueLines.add(0, header);
// Use a Set to track unique keys
Set<String> seenKeys = new HashSet<>();

// Write the results to a new file
Files.write(Paths.get(outputFilePath), uniqueLines);
// Read and process each line
String line;
while ((line = reader.readLine()) != null) {
String[] fields = line.split(",");
if (fields.length > keyIndex) {
String key = fields[keyIndex];
if (seenKeys.add(key)) { // Add returns false if the key was already present
writer.write(line);
writer.newLine();
}
}
}
} catch (IOException e) {
System.out.println("I/O Error occured:" + e);
System.out.println("I/O Error occurred: " + e);
}
}
}
}
33 changes: 33 additions & 0 deletions Week 10/Lecture 17/Assignment 01/Customer/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
HELP.md
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/

### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache

### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr

### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/

### VS Code ###
.vscode/
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
wrapperVersion=3.3.2
distributionType=only-script
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.7/apache-maven-3.9.7-bin.zip
Loading