import java.util.List; final class RelationshipComputer<T extends Comparable> { Relationship computeRelationship(final List<T> firstList, final List<T> secondList) { if (firstList.equals(secondList)) return Relationship.EQUAL; if (checkIfSublist(firstList, secondList)) return Relationship.SUBLIST; if (checkIfSublist(secondList, firstList)) return Relationship.SUPERLIST; return Relationship.UNEQUAL; } private boolean checkIfSublist(final List<T> firstList, final List<T> secondList) { final int firstListSize = firstList.size(); final int secondListSize = secondList.size(); if (firstListSize > secondListSize) return false; final int numberOfSublistCandidates = secondListSize - firstListSize + 1; for (int startIndex = 0; startIndex < numberOfSublistCandidates; startIndex++) { if (secondList.subList(startIndex, startIndex + firstListSize).equals(firstList)) { return true; } } return false; } }