Commit 815bf9ea authored by fallenstardust's avatar fallenstardust

用set<Card>自动去重判断,并进行空值判断检查

parent 3aebb6c8
......@@ -34,7 +34,9 @@ import com.feihua.dialogutils.util.DialogUtils;
import java.io.File;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.Stack;
import cn.garymb.ygomobile.AppsSettings;
......@@ -406,28 +408,39 @@ public class CardDetail extends BaseAdapterPlus.BaseViewHolder {
}
private List<Card> queryList(String keyword) {
// 获取关键词对应的 setcode
long setcode = DataManager.get().getStringManager().getSetCode(keyword);
// 从 cardManager 获取所有卡片
SparseArray<Card> cards = cardManager.getAllCards();
List<Card> matchingCards = new ArrayList<>();
if (cards == null) {
return new ArrayList<>();
}
// 使用 HashSet 来保存匹配的卡片,避免重复并提高查找效率
Set<Card> matchingCards = new HashSet<>();
// 建立CardInfo拥有的字段表
List<Long> cardInfoSetCodes = new ArrayList<>();
// 检查关键词是否存在于卡片名字或描述中
for (int i = 0; i < cards.size(); i++) {
Card card = cards.valueAt(i);
cardInfoSetCodes.clear();//每张卡调用前都清空字段表以防重复
// 如果 card.Name 或 card.Desc 为 null,则跳过该卡片
if (card.Name == null && card.Desc == null) continue;
// 清空字段表以防重复累加
cardInfoSetCodes.clear();
// 将 card 的 setCode 转换为 List<Long>
for (long setCode : card.getSetCode()) {
if (setCode > 0) cardInfoSetCodes.add(setCode);
}
//关键词如果有对应字段则添加进去
if (cardInfoSetCodes.contains(setcode) && !matchingCards.contains(card))
// 检查关键词是否有对应字段
if (setcode > 0 && cardInfoSetCodes.contains(setcode)) {
matchingCards.add(card);
}
// 检查关键词是否存在于卡片名字或描述中
if ((card.Name != null && card.Name.contains(keyword)) ||
(card.Desc != null && card.Desc.contains(keyword))) {
matchingCards.add(card);
// 确保 card.Name 和 card.Desc 不为 null
if ((card.Name != null && card.Name.contains(keyword)) || (card.Desc != null && card.Desc.contains(keyword))) {
if (!matchingCards.contains(card)) matchingCards.add(card);
}
}
return matchingCards;
// 将结果转换回 List<Card>
return new ArrayList<>(matchingCards);
}
private boolean queryable(String keyword) {
......@@ -457,44 +470,45 @@ public class CardDetail extends BaseAdapterPlus.BaseViewHolder {
private List<Card> relatedCards(Card cardInfo) {
SparseArray<Card> cards = cardManager.getAllCards();
// 使用 HashSet 来保存匹配的卡片,避免重复并提高查找效率
Set<Card> matchingCards = new HashSet<>();
// 新创建一个表避免外部修改原本的表
List<String> highlightedTexts = new ArrayList<>(spanStringList);
// 使用 ArrayList 来保存匹配的卡片
List<Card> matchingCards = new ArrayList<>();
// 将 cardInfo 的 setCode 转换为 List<Long>
List<Long> cardInfoSetCodes = new ArrayList<>();
// 将 cardInfo 的 setCode 转换为 Set<Long>
Set<Long> cardInfoSetCodes = new HashSet<>();
for (long setCode : cardInfo.getSetCode()) {
if (setCode != 0) cardInfoSetCodes.add(setCode);
}
Log.w("cc cardInfoSetCodes", cardInfoSetCodes.toString());
for (int i = 0; i < cards.size(); i++) {
Card card = cards.valueAt(i);
// 空值检查
if (card.Name == null || card.Desc == null) continue;
// 检查卡片名或描述是否包含给定卡片的名字
if (!card.Name.equals(cardInfo.Name) && (card.Name.contains(cardInfo.Name) || card.Desc.contains(cardInfo.Name))) {
// 检查卡片是否已经存在于匹配列表中
if (!matchingCards.contains(card)) matchingCards.add(card);
if (!card.Name.equals(cardInfo.Name)) {
if ((card.Name != null && card.Name.contains(cardInfo.Name)) ||
(card.Desc != null && card.Desc.contains(cardInfo.Name))) {
matchingCards.add(card);
}
}
// 获取卡片的字段并检查是否有相同的字段
for (long setCode : card.getSetCode()) {
if (cardInfoSetCodes.contains(setCode)) {
if (!matchingCards.contains(card) && !card.Name.equals(cardInfo.Name))
if (!card.Name.equals(cardInfo.Name))
matchingCards.add(card);
}
}
for (String keyword : highlightedTexts) {
if ((card.Name != null && card.Name.equals(keyword)) //和关键词完全一致的视为关联卡
|| (card.Desc != null && (card.Desc.contains("「" + keyword + "」") || card.Desc.contains("\"" + keyword + "\"")))) {//描述中关键词指向的字段一致的视为关联卡
if (!matchingCards.contains(card) && !card.Name.equals(cardInfo.Name))
boolean nameMatch = card.Name != null && card.Name.equals(keyword);
boolean descMatch = card.Desc != null && (card.Desc.contains("「" + keyword + "」") || card.Desc.contains("\"" + keyword + "\""));
if (nameMatch || descMatch) { // 和关键词完全一致的视为关联卡
if (!card.Name.equals(cardInfo.Name))
matchingCards.add(card);
}
}
}
return matchingCards;
// 将结果转换回 List<Card>
return new ArrayList<>(matchingCards);
}
private void setCardInfo(Card cardInfo, View view) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment