java - 是否可以通过在 for 循环中调用它们的字符串名称来检查数百个字符串数组?
问题描述
public class MaryPoppinsBagandWeasleyTent {
public static void main(String[] args) {
String[] darkorange = {"3darkchartreuse"};
String[] stripedfuchsia = {"5stripedlavender"};
String[] dullgray = {"4mutedcyan", "3lightmaroon"};
String[] dullchartreuse = {"3lighttan", "3dottedbronze"};
//etc for hundreds of lines
String[] names = {"darkorange", "stripedfuchsia",
"dullgray", "dullchartreuse"}; //etc for hundreds of lines
String directs = "";
for (int i = 0; i < names.length; i++) {
if (names[i].contains("shinygold")) {
System.out.println(names[i]);
directs += (names[i] + ",");
}
}
}
}
如上所示,字符串数组的列表非常长。我有一个包含所有字符串数组的所有名称的相应字符串数组。是否可以在 for 循环中调用这些字符串数组中的每一个?这就是我试图做的事情names[I]
,但这只会调用,而STRING names[i]
不是String[]
。names[I]
您可能讨厌极长的数组列表,但我可能很快就会学到更好的方法。
是否可以通过在 for 循环中调用它们的字符串名称来检查数百个字符串数组?
解决方案
tl;博士
为了更好地管理在编译时已知的此类不可变数据,请为每个颜色组创建一个枚举,其中包含颜色名称的集合或列表。
enum ColorGroup
{
DARK_ORANGE( List.of( "3darkchartreuse" ) ),
DULL_GRAY( List.of( "4mutedcyan" , "3lightmaroon" ) );
private List < String > colors;
// Constructor
ColorGroup ( List < String > colors )
{
this.colors = colors;
}
// Getter
public List < String > getColors ( )
{
return this.colors;
}
}
使用该枚举。
for ( ColorGroup colorGroup : ColorGroup.values() )
{
System.out.println( "colorGroup name: " + colorGroup + " contains: " + colorGroup.getColors() );
}
颜色组名称:DARK_ORANGE 包含:[3darkchartreuse]
颜色组名称:DULL_GRAY 包含:[4mutedcyan,3lightmaroon]
Map
如果要将文本名称关联到每个数组,请使用Map
. 映射将条目存储为配对,即导致值的键。在您的情况下,键将是一个String
对象,值将是一个数组。
Map < String, String[] > map = new TreeMap <>();
map.put( "Dark Orange" , new String[] { "3darkchartreuse" } );
map.put( "Dull Gray" , new String[] { "4mutedcyan" , "3lightmaroon" } );
System.out.println( map );
运行时:
{深橙色=[Ljava.lang.String;@77459877,暗灰色=[Ljava.lang.String;@5b2133b1}
枚举与文本
使用文本进行此类标记可能容易出错。例如,拼写"Dark Grey"
与"Dark Gray"
.
因此,您可以选择使用Java 中非常简单但功能强大的枚举工具。枚举对象是常量,在加载类时自动实例化。作为常量,它们的名称按照 Java 约定以全大写形式书写。作为命名对象,它们的使用在编译时检测拼写错误,并提供类型安全。
enum ColorGroupName
{
DARK_ORANGE,
DULL_GRAY
}
EnumMap
对于Map
使用枚举对象作为键的情况,请使用该EnumMap
实现以使用非常少的内存进行非常快速的执行。
Map < ColorGroupName, String[] > map = new EnumMap( ColorGroupName.class );
map.put( ColorGroupName.DARK_ORANGE , new String[] { "3darkchartreuse" } );
map.put( ColorGroupName.DULL_GRAY , new String[] { "4mutedcyan" , "3lightmaroon" } );
System.out.println( map );
集合与数组
我们中的许多人更喜欢集合而不是数组。
Map < ColorGroupName, List < String > > map = new EnumMap( ColorGroupName.class );
map.put( ColorGroupName.DARK_ORANGE , List.of( "3darkchartreuse" ) );
map.put( ColorGroupName.DULL_GRAY , List.of( "4mutedcyan" , "3lightmaroon" ) );
System.out.println( map );
运行时:
{DARK_ORANGE=[3darkchartreuse], DULL_GRAY=[4mutedcyan, 3lightmaroon]}
不可变数据
如果您的地图是不变的,请使用Map.of
创建一个不可修改的地图。
Map < ColorGroupName, List < String > > map =
Map.of(
ColorGroupName.DARK_ORANGE , List.of( "3darkchartreuse" ) ,
ColorGroupName.DULL_GRAY , List.of( "4mutedcyan" , "3lightmaroon" )
);
System.out.println( map );
包含数据的枚举
如果您想变得非常聪明,可以将颜色列表存储在枚举中。
枚举是一种特殊的 Java 类,但仍然是 Java 类。作为一个 Java 类,它可以携带成员变量。它可以提供一个构造函数。要将数据存储在枚举中,请将每个枚举对象的数据传递给其构造函数调用。
enum ColorGroup
{
DARK_ORANGE( List.of( "3darkchartreuse" ) ),
DULL_GRAY( List.of( "4mutedcyan" , "3lightmaroon" ) );
private List < String > colors;
// Constructor
ColorGroup ( List < String > colors )
{
this.colors = colors;
}
// Getter
public List < String > getColors ( )
{
return this.colors;
}
}
使用该枚举。
for ( ColorGroup colorGroup : ColorGroup.values() )
{
System.out.println( "colorGroup name: " + colorGroup + " contains: " + colorGroup.getColors() );
}
颜色组名称:DARK_ORANGE 包含:[3darkchartreuse]
颜色组名称:DULL_GRAY 包含:[4mutedcyan,3lightmaroon]
Map
实现
这是我为帮助选择Map
实现而制作的图表。
推荐阅读
- google-apps-script - 基于在 google sheet html 侧边栏中选择一个选择元素显示文本框
- postgresql - pg_restore 错误:函数 raise_err(unknown) 不存在
- python - 根据分子中是否包含值和分母中的唯一列值计算按百分比分组
- reactjs - Heroku ReactJS 应用程序呈现空白页面,但在本地工作正常
- javascript - Firebase.auth.currentUser not available on load of page but available after a few seconds
- python - GroupSplitShuffle 和 GroupKFolds 之间的区别
- android - 在不重新加载活动的情况下更新回收站视图中的内容
- javascript - SSIS 从对象变量中读取列
- linux - 如何在文本文件的开头连接字符串值
- java - 数据结构在 N 叉树的每一层都获得最大值