这段代码如何优化

2018-04-15 15:16:53 +08:00
 XinLake
String[] meta_head = {
        "Title",
        "Artist",
        "Genre",
        "Copyright",
        "Album",
        "TrackNumber",
        "Description",
        "Rating",
        "Date",
        "Setting",
        "URL",
        "Language",
        "NowPlaying",
        "Publisher",
        "EncodedBy",
        "ArtworkURL",
        "TrackID",
        "TrackTotal",
        "Director",
        "Season",
        "Episode",
        "ShowName",
        "Actors",
        "AlbumArtist",
        "DiscNumber",
        "MAX",
};
String[] meta_data = {
        media.getMeta(Media.Meta.Title),
        media.getMeta(Media.Meta.Artist),
        media.getMeta(Media.Meta.Genre),
        media.getMeta(Media.Meta.Copyright),
        media.getMeta(Media.Meta.Album),
        media.getMeta(Media.Meta.TrackNumber),
        media.getMeta(Media.Meta.Description),
        media.getMeta(Media.Meta.Rating),
        media.getMeta(Media.Meta.Date),
        media.getMeta(Media.Meta.Setting),
        media.getMeta(Media.Meta.URL),
        media.getMeta(Media.Meta.Language),
        media.getMeta(Media.Meta.NowPlaying),
        media.getMeta(Media.Meta.Publisher),
        media.getMeta(Media.Meta.EncodedBy),
        media.getMeta(Media.Meta.ArtworkURL),
        media.getMeta(Media.Meta.TrackID),
        media.getMeta(Media.Meta.TrackTotal),
        media.getMeta(Media.Meta.Director),
        media.getMeta(Media.Meta.Season),
        media.getMeta(Media.Meta.Episode),
        media.getMeta(Media.Meta.ShowName),
        media.getMeta(Media.Meta.Actors),
        media.getMeta(Media.Meta.AlbumArtist),
        media.getMeta(Media.Meta.DiscNumber),
        media.getMeta(Media.Meta.MAX),
};
for (int i = 0; i < meta_data.length; ++i) {
    if (meta_data[i] == null) {
        continue;
    }

    TableRow tableRow = inflateRow(meta_head[i], meta_data[i]);
    vTableLayout.addView(tableRow);
}

如果有信息则添加一行(没有找到信息则跳过不显示),效果如下

5694 次点击
所在节点    Android
10 条回复
asj
2018-04-15 15:35:05 +08:00
挺好的啊,不知道你要优化什么

喜欢的话可以把两个数组改成一个对象的数组,看起来 header 和 data 的关系更清楚一些。
AlisaDestiny
2018-04-15 16:44:19 +08:00
我觉得也还行。
但是如果你还想优化的话你 meta_data 数组用 meta_head 定义的字符数组根据名称反射拿到对应的属性。
fireapp
2018-04-15 17:49:20 +08:00
enum(String, String) 啊
sununiq
2018-04-15 21:11:05 +08:00
枚举,关联 head 和 data
aristotll
2018-04-15 21:47:47 +08:00
枚举应该是更好的 方式 可以保证总是能对上 然后用 values 方法
aristotll
2018-04-15 22:04:41 +08:00
今天好无聊 改写了一个...


@AllArgsConstructor
enum Row {
Title(Meta.Title),
Artist(Meta.Artist);
private final Meta data;

public String metaFrom(final Media media) {
return media.getMeta(this.data);
}

public static void main(final Media media) {
for (final Row row : Row.values()) {
final String meta = row.metaFrom(media);
if (meta == null) {
continue;
}
final TableRow tableRow = inflateRow(row.name(), meta);
}
}

}
814084764
2018-04-15 23:02:55 +08:00
HashMap?
privatezcoding
2018-04-16 09:46:20 +08:00
Android 开发并不推荐枚举 变量命名应该使用驼峰
WispZhan
2018-04-16 11:47:29 +08:00
枚举或者 Map。个人推荐类型安全的枚举。
kifile
2018-04-16 19:09:40 +08:00
假设 Meta 是枚举

String[] meta_data = {
media.getMeta(Media.Meta.Title),
media.getMeta(Media.Meta.Artist),
media.getMeta(Media.Meta.Genre),
media.getMeta(Media.Meta.Copyright),
media.getMeta(Media.Meta.Album),
media.getMeta(Media.Meta.TrackNumber),
media.getMeta(Media.Meta.Description),
media.getMeta(Media.Meta.Rating),
media.getMeta(Media.Meta.Date),
media.getMeta(Media.Meta.Setting),
media.getMeta(Media.Meta.URL),
media.getMeta(Media.Meta.Language),
media.getMeta(Media.Meta.NowPlaying),
media.getMeta(Media.Meta.Publisher),
media.getMeta(Media.Meta.EncodedBy),
media.getMeta(Media.Meta.ArtworkURL),
media.getMeta(Media.Meta.TrackID),
media.getMeta(Media.Meta.TrackTotal),
media.getMeta(Media.Meta.Director),
media.getMeta(Media.Meta.Season),
media.getMeta(Media.Meta.Episode),
media.getMeta(Media.Meta.ShowName),
media.getMeta(Media.Meta.Actors),
media.getMeta(Media.Meta.AlbumArtist),
media.getMeta(Media.Meta.DiscNumber),
media.getMeta(Media.Meta.MAX),
};
meta_data.stream().filter(s->s!=null)
.map(s->inflateRow(s.name(), s)
.forEach(s->vTableLayout.addView(s));

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/446984

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX