Как указано в @Holger, это неэффективно!
package im.silentsudo.gradletest;
import com.google.gson.Gson;
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;
import org.junit.Assert;
import org.junit.Test;
import javax.xml.bind.DatatypeConverter;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class HashComparisionTest {
@AllArgsConstructor
@NoArgsConstructor
static class Post {
Long id;
String title;
}
static private Map<String, Object> generateUser1PostList() {
final List<ComparisionMain.Post> posts = new ArrayList<>();
posts.add(new ComparisionMain.Post(1L, "Post 1"));
posts.add(new ComparisionMain.Post(2L, "Post 2"));
final Map<String, Object> userPosts = new HashMap<>();
userPosts.put("user_a", posts);
return userPosts;
}
static private Map<String, Object> generateUser2PostList() {
final List<ComparisionMain.Post> posts = new ArrayList<>();
posts.add(new ComparisionMain.Post(20L, "Post 20"));
posts.add(new ComparisionMain.Post(21L, "Post 21"));
final Map<String, Object> userPosts = new HashMap<>();
userPosts.put("user_b", posts);
return userPosts;
}
static private String getHash(String content) throws NoSuchAlgorithmException {
MessageDigest messageDigest = MessageDigest.getInstance("MD5");
messageDigest.update(content.getBytes());
byte[] digiest = messageDigest.digest();
return DatatypeConverter.printHexBinary(digiest);
}
@Test
public void testTwoCollectionMeaningfullyEquals() throws NoSuchAlgorithmException {
System.out.println("------------- testTwoCollectionMeaningfullyEquals --------------");
final Gson gson = new Gson();
List<Map<String, Object>> collection1 = new ArrayList<>();
List<Map<String, Object>> collection2 = new ArrayList<>();
collection1.add(generateUser1PostList());
collection2.add(generateUser1PostList());
final String hash1 = getHash(gson.toJson(collection1));
System.out.println(hash1);
final String hash2 = getHash(gson.toJson(collection2));
System.out.println(hash2);
Assert.assertEquals(hash1, hash2);
System.out.println("------------- testTwoCollectionMeaningfullyEquals --------------");
}
@Test
public void testTwoCollectionMeaningfullyNotEquals() throws NoSuchAlgorithmException {
System.out.println("------------- testTwoCollectionMeaningfullyNotEquals --------------");
final Gson gson = new Gson();
List<Map<String, Object>> collection1 = new ArrayList<>();
List<Map<String, Object>> collection2 = new ArrayList<>();
collection1.add(generateUser1PostList());
collection2.add(generateUser2PostList());
final String hash1 = getHash(gson.toJson(collection1));
System.out.println(hash1);
final String hash2 = getHash(gson.toJson(collection2));
System.out.println(hash2);
Assert.assertNotEquals(hash1, hash2);
System.out.println("------------- testTwoCollectionMeaningfullyNotEquals --------------");
}
}
Вывод вышеуказанной программы:
Testing started at 12:01 PM ...
> Task :cleanTest
> Task :compileJava UP-TO-DATE
> Task :processResources NO-SOURCE
> Task :classes UP-TO-DATE
> Task :compileTestJava
> Task :processTestResources NO-SOURCE
> Task :testClasses
> Task :test
------------- testTwoCollectionMeaningfullyNotEquals --------------
766461F7DB37B8EC031BE0145E6832D3
156636D7A2CF2196783F9D644A994391
------------- testTwoCollectionMeaningfullyNotEquals --------------
------------- testTwoCollectionMeaningfullyEquals --------------
766461F7DB37B8EC031BE0145E6832D3
766461F7DB37B8EC031BE0145E6832D3
------------- testTwoCollectionMeaningfullyEquals --------------
BUILD SUCCESSFUL in 0s
4 actionable tasks: 3 executed, 1 up-to-date
12:01:49 PM: Tasks execution finished ':cleanTest :test --tests "im.silentsudo.gradletest.HashComparisionTest"'.
Это очень простая реализация, если вам нужно подробнее о сравнении объектов в java см. https://www.baeldung.com/java-equals-hashcode-contracts