From e4f167074250e791f293eb834a60eb9f63a34664 Mon Sep 17 00:00:00 2001 From: qvalentin Date: Fri, 22 Apr 2022 14:14:04 +0200 Subject: [PATCH] Code Smell: Remove duplicate logic for searching in sets --- .../abstraction/CustomSetPersistenceDecorator.java | 12 ++++++++++-- .../src/main/java/category/CategoryRepository.java | 4 ++-- 3-Domain/src/main/java/link/LinkRepository.java | 6 +++--- .../src/main/java/datastructures/set/CustomSet.java | 6 ++++-- .../java/datastructures/set/CustomStrictSet.java | 7 +++++++ 5 files changed, 26 insertions(+), 9 deletions(-) diff --git a/3-Domain/src/main/java/abstraction/CustomSetPersistenceDecorator.java b/3-Domain/src/main/java/abstraction/CustomSetPersistenceDecorator.java index fa25ab1..5cf22ce 100644 --- a/3-Domain/src/main/java/abstraction/CustomSetPersistenceDecorator.java +++ b/3-Domain/src/main/java/abstraction/CustomSetPersistenceDecorator.java @@ -3,12 +3,15 @@ package abstraction; import datastructures.set.CustomSet; import datastructures.set.CustomStrictSet; +import java.util.Optional; import java.util.Set; +import java.util.function.Predicate; import java.util.stream.Stream; /** * A Decorator to intercept all state changes on a set and sync them with the persistence layer of the * application. + * * @param The data type that should be stored and updated in the persistence layer */ public class CustomSetPersistenceDecorator implements CustomSet { @@ -22,12 +25,17 @@ public class CustomSetPersistenceDecorator implements CustomSet { } @Override - public Stream stream(){ + public Optional find(Predicate predicate) { + return set.find(predicate); + } + + @Override + public Stream stream() { return set.stream(); } @Override - public boolean add(T value){ + public boolean add(T value) { persistenceAdapter.add(value); return set.add(value); } diff --git a/3-Domain/src/main/java/category/CategoryRepository.java b/3-Domain/src/main/java/category/CategoryRepository.java index ac77477..9a16da2 100644 --- a/3-Domain/src/main/java/category/CategoryRepository.java +++ b/3-Domain/src/main/java/category/CategoryRepository.java @@ -19,7 +19,7 @@ public class CategoryRepository { } public Optional getByName(CategoryName name) { - return categories.stream().filter(category -> category.getName().equals(name)).findFirst(); + return categories.find(category -> category.getName().equals(name)); } public CategoryId getIdByName(CategoryName name) { @@ -31,7 +31,7 @@ public class CategoryRepository { } public Optional getById(CategoryId id) { - return categories.stream().filter(category -> category.getId().equals(id)).findFirst(); + return categories.find(category -> category.getId().equals(id)); } public Set getAll() { diff --git a/3-Domain/src/main/java/link/LinkRepository.java b/3-Domain/src/main/java/link/LinkRepository.java index dbd4879..21feab0 100644 --- a/3-Domain/src/main/java/link/LinkRepository.java +++ b/3-Domain/src/main/java/link/LinkRepository.java @@ -1,8 +1,8 @@ package link; -import datastructures.set.CustomSet; import abstraction.CustomSetPersistenceDecorator; import abstraction.PersistenceAdapter; +import datastructures.set.CustomSet; import exeptions.LinkAlreadyExists; import exeptions.LinkDoesNotExist; @@ -17,11 +17,11 @@ public class LinkRepository { } public Optional getById(LinkId id) { - return links.stream().filter(link -> link.getId().equals(id)).findFirst(); + return links.find(link -> link.getId().equals(id)); } public Optional getByUrl(LinkUrl url) { - return links.stream().filter(link -> link.getUrl().equals(url)).findFirst(); + return links.find(link -> link.getUrl().equals(url)); } public void removeById(LinkId id) { diff --git a/4-Abstraction/src/main/java/datastructures/set/CustomSet.java b/4-Abstraction/src/main/java/datastructures/set/CustomSet.java index af0e1f7..d6fcc8e 100644 --- a/4-Abstraction/src/main/java/datastructures/set/CustomSet.java +++ b/4-Abstraction/src/main/java/datastructures/set/CustomSet.java @@ -1,17 +1,19 @@ package datastructures.set; +import java.util.Optional; import java.util.Set; +import java.util.function.Predicate; import java.util.stream.Stream; public interface CustomSet { - - Stream stream(); boolean add(T value); boolean remove(T value); + Optional find(Predicate predicate); + Set getSet(); } diff --git a/4-Abstraction/src/main/java/datastructures/set/CustomStrictSet.java b/4-Abstraction/src/main/java/datastructures/set/CustomStrictSet.java index 017bf88..fdee7f5 100644 --- a/4-Abstraction/src/main/java/datastructures/set/CustomStrictSet.java +++ b/4-Abstraction/src/main/java/datastructures/set/CustomStrictSet.java @@ -1,6 +1,8 @@ package datastructures.set; +import java.util.Optional; import java.util.Set; +import java.util.function.Predicate; import java.util.stream.Stream; public class CustomStrictSet implements CustomSet { @@ -16,6 +18,11 @@ public class CustomStrictSet implements CustomSet { return this.set.stream(); } + @Override + public Optional find(Predicate predicate) { + return set.stream().filter(predicate).findFirst(); + } + @Override public Set getSet() { return this.set;