select class 个对象字段的数组

select array of class objects field

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

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

我还有一些对象正在使用这个 class

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[])select 名称数组

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

thingsToShow 是 otherClass 的数组列表

如何 select array of geneNames[index].name?

试试这个。

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]

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;
}

您可以使用 GeneType class 中的 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);
    }
}

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

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;
}