List<MyTest> myTestList =new ArrayList<>(); myTestList.add(new MyTest("1","2","3")); myTestList.add(new MyTest("2","3","1")); myTestList.add(new MyTest("3","2","1")); 使用java实现,求对象跟对象比同一个属性,最大值-0.5
时间: 2023-06-11 13:06:56 浏览: 98
可以使用双重循环来比较每个对象之间的同一个属性的差值,计算最大值并减去0.5。代码如下:
```
double maxDiff = Double.MIN_VALUE;
for (int i = 0; i < myTestList.size() - 1; i++) {
MyTest obj1 = myTestList.get(i);
for (int j = i + 1; j < myTestList.size(); j++) {
MyTest obj2 = myTestList.get(j);
double diff = Math.abs(Double.parseDouble(obj1.getProperty()) - Double.parseDouble(obj2.getProperty()));
if (diff > maxDiff) {
maxDiff = diff;
}
}
}
maxDiff -= 0.5;
System.out.println("最大差值为:" + maxDiff);
```
其中,`MyTest`类是一个自定义的类,包含三个属性:`property1`、`property2`和`property3`。为了简化代码,这里只取了一个属性作为比较差值的依据。你需要将`getProperty()`方法替换成你要比较的属性的getter方法。
相关问题
List<SysRoleDataAccessRelationEntity> modelAccess = sysUserDataAccessService.listDataAccess(userId).getResponseBody().getModelAccess();的单元测试怎么写
对于这个单元测试,我们需要模拟SysUserDataAccessService.listDataAccess(userId)方法的返回值,以便测试它是否正确地返回SysRoleDataAccessRelationEntity列表。
下面是一个示例代码,使用Mockito框架来模拟SysUserDataAccessService.listDataAccess(userId)方法的返回值:
```java
@RunWith(MockitoJUnitRunner.class)
public class MyTest {
@Mock
private SysUserDataAccessService sysUserDataAccessService;
@Test
public void testListDataAccess() {
// 模拟返回值
ApiResponse<List<SysRoleDataAccessRelationEntity>> response = new ApiResponse<>();
List<SysRoleDataAccessRelationEntity> modelAccess = new ArrayList<>();
modelAccess.add(new SysRoleDataAccessRelationEntity());
response.setResponseBody(modelAccess);
Mockito.when(sysUserDataAccessService.listDataAccess(Mockito.anyLong())).thenReturn(response);
// 调用被测试方法
List<SysRoleDataAccessRelationEntity> result = sysUserDataAccessService.listDataAccess(123L).getResponseBody().getModelAccess();
// 验证返回值是否正确
Assert.assertEquals(result.size(), 1);
}
}
```
在上面的代码中,我们使用MockitoJUnitRunner来运行测试,并使用@Mock注解来创建一个SysUserDataAccessService的Mock对象。然后,我们使用Mockito.when()方法来模拟SysUserDataAccessService.listDataAccess(userId)方法的返回值,以便它返回包含一个SysRoleDataAccessRelationEntity对象的列表。最后,我们调用被测试方法sysUserDataAccessService.listDataAccess(123L),并使用Assert.assertEquals()方法来验证返回值是否正确。
- 定义一个注解MyTest,要求只能定义在方法上,注解可以在运行时起作用 - 凡是被MyTest注解标记的方法,都可以自动执行 - MyTest注解有order属性,默认值是1。可以赋值整数数字,order值大的方法先执行
可以这样定义MyTest注解:
```java
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface MyTest {
int order() default 1;
}
```
- `@Retention(RetentionPolicy.RUNTIME)` 表示 MyTest 注解在运行时保留,可以通过反射获取;
- `@Target(ElementType.METHOD)` 表示 MyTest 注解只能定义在方法上;
- `int order() default 1;` 表示 MyTest 注解有一个 order 属性,默认值为 1。
接下来,我们可以定义一个测试类,使用 MyTest 注解:
```java
public class MyTestDemo {
@MyTest(order = 2)
public void test1() {
System.out.println("test1");
}
@MyTest(order = 1)
public void test2() {
System.out.println("test2");
}
@MyTest
public void test3() {
System.out.println("test3");
}
public static void main(String[] args) throws Exception {
// 获取 MyTestDemo 类中所有方法
Method[] methods = MyTestDemo.class.getDeclaredMethods();
// 定义一个 Map 用于存放 MyTest 注解的方法
Map<Integer, List<Method>> map = new TreeMap<>((o1, o2) -> o2 - o1);
for (Method method : methods) {
// 判断方法是否被 MyTest 注解标记
if (method.isAnnotationPresent(MyTest.class)) {
// 获取 MyTest 注解
MyTest myTest = method.getAnnotation(MyTest.class);
// 获取 order 值
int order = myTest.order();
// 判断 map 中是否已经存在 order 值对应的 List
if (!map.containsKey(order)) {
map.put(order, new ArrayList<>());
}
// 将方法添加到 List 中
map.get(order).add(method);
}
}
// 循环执行方法
for (Map.Entry<Integer, List<Method>> entry : map.entrySet()) {
for (Method method : entry.getValue()) {
// 执行方法
method.invoke(new MyTestDemo());
}
}
}
}
```
MyTestDemo 类中定义了三个方法 test1、test2 和 test3,并且都被 MyTest 注解标记,其中 test1 和 test2 的 order 值分别为 2 和 1,test3 没有指定 order 值,默认为 1。在 main 方法中,我们使用反射获取 MyTestDemo 类中所有方法,然后通过 TreeMap 来按照 order 值排序,最后循环执行方法。执行结果如下:
```
test1
test2
test3
```
可以看到,先执行了 order 值为 2 的 test1 方法,然后执行了 order 值为 1 的 test2 和 test3 方法。
阅读全文
相关推荐




