【问题标题】:select array of class objects field选择类对象字段的数组
【发布时间】:2020-07-23 11:03:36
【问题描述】:

我有一个枚举和一个包含两个字段的类:

enum types {
    nan,
    num,
    text,
    col,
    dress
  };
class GeneType {
  String name;
  types type;
  GeneType(String name, types type) {
    this.name = name;
    this.type = type;
  }
}

我还有使用这个类的对象数组

final GeneType[][] geneNames = new GeneType[][]{
  {
    new GeneType("Unknown", types.nan),
    new GeneType("Age", types.num),
    new GeneType("Fav number", types.num),
    new GeneType("Height", types.num),
    new GeneType("Name", types.text)
  },
  {
    new GeneType("Unknown", types.nan),
    new GeneType("Not Sure", types.nan),
    new GeneType("This", types.nan),
    new GeneType("That", types.nan),
    new GeneType("The other", types.nan),
    new GeneType("Eye color", types.col),
    new GeneType("Fav color", types.col),
    new GeneType("Name", types.text)
  }
}

我想使用最简单的方法来选择名称数组来设置选项卡名称 (String[])

new Tabs(x, y, wid, hei, orientation, thingsToShow,
 geneNames[howMuchDataNeed(thingsToShow.size())].name)

thingsToShow 是 otherClass 的数组列表

如何选择geneNames[index].name的数组?

【问题讨论】:

  • 您可以创建一个基于索引返回数组的方法。

标签: java arrays class processing


【解决方案1】:

geneNames[index],您将获得基于您提供的index 值的内部数组之一。例如,如果调用geneNames[0],您将得到以下数组作为结果。

[
    new GeneType("Unknown", types.nan),
    new GeneType("Age", types.num),
    new GeneType("Fav number", types.num),
    new GeneType("Height", types.num),
    new GeneType("Name", types.text)
]

那么您需要将这个GeneType 对象数组映射 到它们对应名称的数组中。为此,您可以使用 Java 的 stream API,如下所示。

String[] names = Arrays.stream(geneNames[index])
        .map(gene -> gene.name)
        .toArray(String[]::new);

更新: 不使用 Java stream API 的实现

GeneType[] selected = geneNames[index];
String[] names = new String[selected.length];
for (int i = 0; i < selected.length; i++) {
    names[i] = selected[i].name;
}

【讨论】:

  • 这可能是我想要实现的答案,但不幸的是,我认为我的 android 处理编译器会传递该代码并且它会传递,但调试器捕获了两个错误(与 - >:: 个字符
  • 那么您可能使用的是不支持这些 stream API 的旧 JDK 版本 (stream API 的替代实现更新了答案。
【解决方案2】:

试试这个。

int index = 1;
String[] names = Arrays.stream(geneNames[index])
    .map(gene -> gene.name)
    .toArray(String[]::new);
System.out.println(Arrays.toString(names));

输出:

[Unknown, Not Sure, This, That, The other, Eye color, Fav color, Name]

【讨论】:

    【解决方案3】:

    您可以使用 GeneType 类中的 toString() 覆盖方法来执行此操作。 希望这段代码对你有所帮助。

    import java.util.ArrayList;
    import java.util.Arrays;
    
    enum types {
        nan,
        num,
        text,
        col,
        dress
    };
    
    class GeneType {
    
        String name;
        types type;
    
        GeneType(String name, types type) {
            this.name = name;
            this.type = type;
        }
    
        @Override
        public String toString() {
            return name;
        }
        
        
    }
    
    class question {
    
        public static void main(String[] args) {
            final GeneType[][] geneNames = new GeneType[][]{
                {
                    new GeneType("Unknown", types.nan),
                    new GeneType("Age", types.num),
                    new GeneType("Fav number", types.num),
                    new GeneType("Height", types.num),
                    new GeneType("Name", types.text)
                },
                {
                    new GeneType("Unknown", types.nan),
                    new GeneType("Not Sure", types.nan),
                    new GeneType("This", types.nan),
                    new GeneType("That", types.nan),
                    new GeneType("The other", types.nan),
                    new GeneType("Eye color", types.col),
                    new GeneType("Fav color", types.col),
                    new GeneType("Name", types.text)
                }
            };
            ArrayList<GeneType> names = new ArrayList<>();
            for (int i = 0; i < geneNames[0].length; i++) {
                names.add(geneNames[0][i]);
            }
            System.out.println(names);
        }
    }
    

    【讨论】:

      【解决方案4】:

      这可能不是最好的选择,但它通过了。

      String[] SelectNames(){
        GeneType[] carry = geneNames[index];
        String[] toReturn = new String[carry.length];
        for(int i=0; i<toReturn.length; i++)
          toReturn[i]=carry[i].name;
        return toReturn;
      }
      

      【讨论】:

        猜你喜欢
        • 2016-08-28
        • 2014-10-31
        • 1970-01-01
        • 1970-01-01
        • 2015-01-31
        • 1970-01-01
        • 1970-01-01
        • 2014-11-27
        • 1970-01-01
        相关资源
        最近更新 更多