我很难理解为什么以下内容没有给我相同的结果。
如果我使用 Javers 来比较两个列表(其中的项目顺序不同),那么我不会得到任何差异,因为我已指定 AS_SET 列表比较来忽略列表中项目的顺序。
如果我随后将这些列表包装为对象的属性,Javers 会返回列表的元素因列表中项目的顺序而不同。
AS_SET 应该应用于对象内的列表吗?就好像被忽视一样
public class App {
public static void main(String[] args) {
List<ListItem> list1 = ImmutableList.of(
ListItem.builder()
.itemName("item1")
.itemValue("value")
.build(),
ListItem.builder()
.itemName("item2")
.itemValue("value2")
.build()
);
List<ListItem> list2 = ImmutableList.of(
ListItem.builder()
.itemName("item2")
.itemValue("value2")
.build(),
ListItem.builder()
.itemName("item1")
.itemValue("value")
.build()
);
TopLevelClass tlc1 = TopLevelClass.builder().items(list1).build();
TopLevelClass tlc2 = TopLevelClass.builder().items(list2).build();
Diff diff = JaversBuilder.javers().withListCompareAlgorithm(ListCompareAlgorithm.AS_SET).build().compare(list1, list2);
System.out.println(diff);
Diff diffTlc = JaversBuilder.javers().withListCompareAlgorithm(ListCompareAlgorithm.AS_SET).build().compare(tlc1, tlc2);
System.out.println(diffTlc);
}
}
Run Code Online (Sandbox Code Playgroud)
以下类别:
package wibble;
import lombok.Builder;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;
@Builder
@Getter
@Setter
@EqualsAndHashCode
public class ListItem {
private String itemName;
private String itemValue;
}
Run Code Online (Sandbox Code Playgroud)
package wibble;
import lombok.Builder;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;
import java.util.List;
@Builder
@Getter
@Setter
@EqualsAndHashCode
public class TopLevelClass {
List<ListItem> items;
}
Run Code Online (Sandbox Code Playgroud)
上述运行时的输出:
Diff:
Diff:
* changes on wibble.TopLevelClass/ :
- 'items/0.itemName' changed from 'item1' to 'item2'
- 'items/0.itemValue' changed from 'value' to 'value2'
- 'items/1.itemName' changed from 'item2' to 'item1'
- 'items/1.itemValue' changed from 'value2' to 'value'
Run Code Online (Sandbox Code Playgroud)
免责声明:实际上我以前从未听说过JaVers,我只是偶然发现这个问题并感到好奇。所以我在这里完全是新手。
\n查看JaVers 手册中的diff 示例,您会读到类似以下内容:
\n\n\n配置
\nJaVers 需要知道该类
\nEmployee是一个Entity(...) It\xe2\x80\x99s 足以用注释@Id(...)
那么让我们试试这个:
\npackage wibble;\n\nimport lombok.*;\nimport org.javers.core.metamodel.annotation.Id;\n\n@Builder\n@Getter\n@Setter\n@EqualsAndHashCode\n@ToString\npublic class ListItem {\n @Id\n private String itemName;\n private String itemValue;\n}\nRun Code Online (Sandbox Code Playgroud)\n控制台日志变为:
\nDiff:\n\nDiff:\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
3156 次 |
| 最近记录: |