Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Y
YGOMobile-Cn-Ko-En
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Packages
Packages
List
Container Registry
Analytics
Analytics
CI / CD
Code Review
Insights
Issues
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
fallenstardust
YGOMobile-Cn-Ko-En
Commits
815bf9ea
Commit
815bf9ea
authored
Jan 27, 2025
by
fallenstardust
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
用set<Card>自动去重判断,并进行空值判断检查
parent
3aebb6c8
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
42 additions
and
28 deletions
+42
-28
mobile/src/main/java/cn/garymb/ygomobile/ui/cards/CardDetail.java
...rc/main/java/cn/garymb/ygomobile/ui/cards/CardDetail.java
+42
-28
No files found.
mobile/src/main/java/cn/garymb/ygomobile/ui/cards/CardDetail.java
View file @
815bf9ea
...
...
@@ -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
)
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment