From b64a7a4fd5251c1a4b085d14c810a026fba94136 Mon Sep 17 00:00:00 2001 From: godotg Date: Sat, 21 Oct 2023 21:46:57 +0800 Subject: [PATCH] ref[storage]: refactor lambda of storage --- .../zfoo/storage/manager/AbstractStorage.java | 23 +++++++++---------- 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/storage/src/main/java/com/zfoo/storage/manager/AbstractStorage.java b/storage/src/main/java/com/zfoo/storage/manager/AbstractStorage.java index 2a79050b..d2daa1f3 100644 --- a/storage/src/main/java/com/zfoo/storage/manager/AbstractStorage.java +++ b/storage/src/main/java/com/zfoo/storage/manager/AbstractStorage.java @@ -14,6 +14,7 @@ package com.zfoo.storage.manager; import com.zfoo.protocol.collection.CollectionUtils; import com.zfoo.protocol.util.*; +import com.zfoo.storage.anno.Index; import com.zfoo.storage.interpreter.ResourceInterpreter; import com.zfoo.storage.model.IStorage; import com.zfoo.storage.model.IdDef; @@ -194,24 +195,22 @@ public abstract class AbstractStorage implements IStorage { // 4. 通过将func带入到dataMap中求解,适合GraalVM环境中 if (indexName == null) { try { - var fields = clazz.getDeclaredFields(); - Arrays.stream(fields).forEach(ReflectionUtils::makeAccessible); + var fields = Arrays.stream(clazz.getDeclaredFields()) + .filter(it -> it.isAnnotationPresent(Index.class)) + .peek(ReflectionUtils::makeAccessible) + .toList(); + for (var value : getAll()) { var r = func.apply(value); - // 如果只有一个能匹配到func的返回值则就是这个方法 - var count = 0; - var fieldName = StringUtils.EMPTY; + if (r == null) { + continue; + } for (var field : fields) { var fieldValue = ReflectionUtils.getField(field, value); - if (Objects.equals(r, fieldValue)) { - count++; - fieldName = field.getName(); + if (Objects.equals(r, fieldValue) && r.getClass() == fieldValue.getClass()) { + indexName = field.getName(); } } - if (count == 1) { - indexName = fieldName; - break; - } } } catch (Exception e) { }