Skip to content

Commit

Permalink
Add performance metrics and refactor various classes
Browse files Browse the repository at this point in the history
Added code to measure execution time in `UsePerson.java`.
Refactored `UsePerson.java`, `Person.java`, `Golfer.java`, `FileFilterTest.java`, and `LoopsSortsAndIfs.java` for clarity, usability, and performance.
Created `CompanyEmployee.java` and `LazyMessageSupplierTest.java` to implement interfaces and testing, respectively.
Made amendments in the test classes `CompanyEmployeeTest.java` and `FileFilterTest.java`.
  • Loading branch information
kousen committed Apr 17, 2024
1 parent 08d6b9a commit e075d97
Show file tree
Hide file tree
Showing 8 changed files with 94 additions and 33 deletions.
31 changes: 31 additions & 0 deletions src/main/java/interfaces/CompanyEmployee.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package interfaces;

public class CompanyEmployee implements Company, Employee {

private final String first;
private final String last;

public CompanyEmployee(String first, String last) {
this.first = first;
this.last = last;
}

public String getName() {
return Employee.super.getName() + " works for " + Company.super.getName();
}

@Override
public String getFirst() {
return first;
}

@Override
public String getLast() {
return last;
}

@Override
public void doWork() {
System.out.println("Converting caffeine into code for $$$");
}
}
4 changes: 1 addition & 3 deletions src/main/java/lambdas/Person.java
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,7 @@ public void setName(String name) {
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Person)) return false;

Person person = (Person) o;
if (!(o instanceof Person person)) return false;

return Objects.equals(name, person.name);
}
Expand Down
8 changes: 6 additions & 2 deletions src/main/java/lambdas/UsePerson.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,15 @@ public static void main(String[] args) {
.collect(Collectors.toList()); // Converts Stream<Person> to List<Person>
System.out.println(people);

long startTime = System.nanoTime();
people = names.stream()
.peek(name -> System.out.println(name + " on thread " + Thread.currentThread().getName()))
.map(Person::new) // uses the Person(String) ctr
// .map(Person::new) // uses the Person(Person) ctr
.collect(Collectors.toList());
.collect(Collectors.toList()); // reduction operation
long endTime = System.nanoTime();
System.out.println(people);
System.out.println("Time taken: " + (endTime - startTime) / 1_000_000 + " ms");

Person[] peopleArray = names.stream()
.map(Person::new)
Expand All @@ -37,7 +41,7 @@ public static void main(String[] args) {
List<String> fullNames = Arrays.asList(
"John Lennon", "Paul McCartney", "George Harrison", "Ringo Starr");
people = fullNames.stream()
.map(name -> name.split(" "))
.map(name -> name.split("\\s+"))
.map(Person::new) // use the Person(String...) ctr
.collect(Collectors.toList());
System.out.println(people);
Expand Down
28 changes: 7 additions & 21 deletions src/main/java/refactoring/after/LoopsSortsAndIfs.java
Original file line number Diff line number Diff line change
@@ -1,30 +1,16 @@
package refactoring.after;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;

public class LoopsSortsAndIfs {
public static void main(String[] args) {
String[] strings = "this is an array of strings".split(" ");

List<String> evenLengths = new ArrayList<>();
for (String s : strings) {
if (s.length() % 2 == 0) {
evenLengths.add(s.toUpperCase());
}
}

Collections.sort(evenLengths, new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
return s1.length() - s2.length();
}
});

for (String s : evenLengths) {
System.out.println(s);
}
Arrays.stream("this is an array of strings".split(" "))
.filter(s -> s.length() % 2 == 0)
.map(String::toUpperCase)
.sorted(Comparator.comparingInt(String::length)
.thenComparing(Comparator.naturalOrder()))
.forEach(System.out::println);
}
}
6 changes: 4 additions & 2 deletions src/main/java/sorting/Golfer.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package sorting;

import java.util.Objects;

public class Golfer implements Comparable<Golfer> {
private String first;
private String last;
Expand Down Expand Up @@ -54,8 +56,8 @@ public boolean equals(Object o) {

Golfer golfer = (Golfer) o;

if (first != null ? !first.equals(golfer.first) : golfer.first != null) return false;
return last != null ? last.equals(golfer.last) : golfer.last == null;
if (!Objects.equals(first, golfer.first)) return false;
return Objects.equals(last, golfer.last);

}

Expand Down
6 changes: 4 additions & 2 deletions src/test/java/interfaces/CompanyEmployeeTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.assertEquals;

// Create a class called CompanyEmployee that implements both
// the Company and Employee interfaces
// Implement the necessary methods
Expand All @@ -11,7 +13,7 @@ public class CompanyEmployeeTest {

@Test
public void getName() {
// CompanyEmployee emp = new CompanyEmployee("Peter", "Gibbons");
// assertEquals("Peter Gibbons works for Initech", emp.getName());
var emp = new CompanyEmployee("Peter", "Gibbons");
assertEquals("Peter Gibbons works for Initech", emp.getName());
}
}
9 changes: 6 additions & 3 deletions src/test/java/lambdas/FileFilterTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@

import static org.junit.jupiter.api.Assertions.assertEquals;

@SuppressWarnings({"Convert2Lambda", "Anonymous2MethodRef"})
public class FileFilterTest {
private final File root = new File("src/main/java");

Expand All @@ -33,7 +34,7 @@ public boolean accept(File pathname) {

@Test
public void listDirectories_expressionLambda() {
File[] directories = root.listFiles(pathname -> pathname.isDirectory());
File[] directories = root.listFiles(File::isDirectory);
assert directories != null;
assertEquals(14, directories.length);
}
Expand All @@ -50,7 +51,8 @@ public void listDirectories_blockLambda() {

@Test
public void listDirectories_assignToVariable() {
FileFilter filter = pathname -> pathname.isDirectory();
//FileFilter filter = pathname -> pathname.isDirectory();
FileFilter filter = File::isDirectory;
File[] directories = root.listFiles(filter);
assert directories != null;
assertEquals(14, directories.length);
Expand All @@ -76,7 +78,8 @@ void iterate_over_map() {
map.forEach((k, v) -> System.out.println(k + " -> " + v));

var list = List.of("a", "b", "c");
list.forEach(x -> System.out.println(x));
list.forEach(x -> System.out.println("the value of x is " + x));
list.forEach(System.out::println);
}

}
35 changes: 35 additions & 0 deletions src/test/java/lambdas/LazyMessageSupplierTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package lambdas;

import org.junit.jupiter.api.Test;

import java.util.logging.Logger;

import static org.junit.jupiter.api.Assertions.assertTrue;

public class LazyMessageSupplierTest {
private final Logger logger = Logger.getLogger(LazyMessageSupplierTest.class.getName());

private String getErrorMessage() {
System.out.println("Generating error message...");
return "An error occurred";
}

private String getLogMessage() {
System.out.println("Generating log message...");
return "A log message";
}

@Test
void testBoolean() {
boolean x = true;
logger.fine(getLogMessage());
assertTrue(x, getErrorMessage());
}

@Test
void testBooleanWithLazyErrorMessage() {
boolean x = true;
logger.fine(() -> getLogMessage());
assertTrue(x, () -> getErrorMessage());
}
}

0 comments on commit e075d97

Please sign in to comment.