diff --git a/spring-boot-data/src/main/java/com/baeldung/adapters/FriendDAOAdapter.java b/spring-boot-data/src/main/java/com/baeldung/adapters/FriendDAOAdapter.java new file mode 100644 index 000000000000..c5683b9de148 --- /dev/null +++ b/spring-boot-data/src/main/java/com/baeldung/adapters/FriendDAOAdapter.java @@ -0,0 +1,16 @@ +package com.baeldung.adapters; + +import com.baeldung.domain.Friend; +import com.baeldung.ports.FriendDAOPort; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class FriendDAOAdapter implements FriendDAOPort { + @Override + public List list(Long id) { + // Call external component to query friends data and convert the entities to friends domain + return null; + } +} diff --git a/spring-boot-data/src/main/java/com/baeldung/adapters/FriendUIAdapter.java b/spring-boot-data/src/main/java/com/baeldung/adapters/FriendUIAdapter.java new file mode 100644 index 000000000000..360434035c2d --- /dev/null +++ b/spring-boot-data/src/main/java/com/baeldung/adapters/FriendUIAdapter.java @@ -0,0 +1,21 @@ +package com.baeldung.adapters; + +import com.baeldung.domain.Friend; +import com.baeldung.ports.FriendUIPort; +import com.baeldung.service.FriendService; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Map; + +@Service +public class FriendUIAdapter implements FriendUIPort { + @Resource + private FriendService friendService; + + @Override + public Map> getFriends(Long id) { + return friendService.friends(id); + } +} diff --git a/spring-boot-data/src/main/java/com/baeldung/domain/Friend.java b/spring-boot-data/src/main/java/com/baeldung/domain/Friend.java new file mode 100644 index 000000000000..c86d5e70ee3d --- /dev/null +++ b/spring-boot-data/src/main/java/com/baeldung/domain/Friend.java @@ -0,0 +1,49 @@ +package com.baeldung.domain; + +public class Friend { + private Long id; + private String name; + private Integer age; + private Long updateTime; + private String group; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Integer getAge() { + return age; + } + + public void setAge(Integer age) { + this.age = age; + } + + public Long getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(Long updateTime) { + this.updateTime = updateTime; + } + + public String getGroup() { + return group; + } + + public void setGroup(String group) { + this.group = group; + } +} diff --git a/spring-boot-data/src/main/java/com/baeldung/ports/FriendDAOPort.java b/spring-boot-data/src/main/java/com/baeldung/ports/FriendDAOPort.java new file mode 100644 index 000000000000..2d07de35b7ac --- /dev/null +++ b/spring-boot-data/src/main/java/com/baeldung/ports/FriendDAOPort.java @@ -0,0 +1,9 @@ +package com.baeldung.ports; + +import com.baeldung.domain.Friend; + +import java.util.List; + +public interface FriendDAOPort { + List list(Long id); +} diff --git a/spring-boot-data/src/main/java/com/baeldung/ports/FriendUIPort.java b/spring-boot-data/src/main/java/com/baeldung/ports/FriendUIPort.java new file mode 100644 index 000000000000..899b022d2bdb --- /dev/null +++ b/spring-boot-data/src/main/java/com/baeldung/ports/FriendUIPort.java @@ -0,0 +1,10 @@ +package com.baeldung.ports; + +import com.baeldung.domain.Friend; + +import java.util.List; +import java.util.Map; + +public interface FriendUIPort { + Map> getFriends(Long id); +} diff --git a/spring-boot-data/src/main/java/com/baeldung/service/FriendService.java b/spring-boot-data/src/main/java/com/baeldung/service/FriendService.java new file mode 100644 index 000000000000..333355db31dc --- /dev/null +++ b/spring-boot-data/src/main/java/com/baeldung/service/FriendService.java @@ -0,0 +1,25 @@ +package com.baeldung.service; + +import com.baeldung.domain.Friend; +import com.baeldung.ports.FriendDAOPort; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Map; + +import static java.util.Comparator.comparingLong; +import static java.util.stream.Collectors.groupingBy; + +@Service +public class FriendService { + @Resource + private FriendDAOPort friendDAOPort; + + public Map> friends(Long id) { + List friends = friendDAOPort.list(id); + return friends.stream() + .sorted(comparingLong(Friend::getUpdateTime).reversed()) + .collect(groupingBy(Friend::getGroup)); + } +}