选择类对象字段的数组。

huangapple go评论79阅读模式
英文:

select array of class objects field

问题

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

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 是另一个类的 ArrayList。

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

英文:

I have an enum and a class with two fields:

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

I have also array of objects that are using this 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)
  }
}

I wand to select array of names using the simplest method to set tab names (String[])

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

thingsToShow is arrayList of otherClass

How to select array of geneNames[index].name?

答案1

得分: 2

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;
}
英文:

From geneNames[index] you will get one of the internal arrays based on the index value you have provided. For example, if geneNames[0] is called, you will get the following array as the result.

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

Then what you require is to map this array of GeneType objects to an array of their corresponding names. For that, you can use Java's stream APIs as follows.

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

Update: Implementation without using Java stream APIs

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

答案2

得分: 1

尝试一下。

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]
英文:

Try this.

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

output:

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

答案3

得分: 0

以下是翻译好的部分:

可以通过在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);
    }
}
英文:

You can do this using toString() overriding method in GeneType class.
I hope this code will help you.

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(&quot;Unknown&quot;, types.nan),
new GeneType(&quot;Age&quot;, types.num),
new GeneType(&quot;Fav number&quot;, types.num),
new GeneType(&quot;Height&quot;, types.num),
new GeneType(&quot;Name&quot;, types.text)
},
{
new GeneType(&quot;Unknown&quot;, types.nan),
new GeneType(&quot;Not Sure&quot;, types.nan),
new GeneType(&quot;This&quot;, types.nan),
new GeneType(&quot;That&quot;, types.nan),
new GeneType(&quot;The other&quot;, types.nan),
new GeneType(&quot;Eye color&quot;, types.col),
new GeneType(&quot;Fav color&quot;, types.col),
new GeneType(&quot;Name&quot;, types.text)
}
};
ArrayList&lt;GeneType&gt; names = new ArrayList&lt;&gt;();
for (int i = 0; i &lt; geneNames[0].length; i++) {
names.add(geneNames[0][i]);
}
System.out.println(names);
}
}

答案4

得分: 0

这可能不是最佳选项,但它能够通过。

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;
}
英文:

This isn't propably the best option, but it pass through.

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

huangapple
  • 本文由 发表于 2020年7月23日 19:03:36
  • 转载请务必保留本文链接:https://go.coder-hub.com/63052746.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定