Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java实现(具有不同数据类型的列表)_Java_List_Types - Fatal编程技术网

java实现(具有不同数据类型的列表)

java实现(具有不同数据类型的列表),java,list,types,Java,List,Types,我还不太习惯Java。我有一个类,它应该包含一个列表。可以想象,此列表表示表中的一行(列名、特定类型的值): 由于列表的内容应该是灵活的,所以我不能使用类成员变量。 基本上,程序员对内容是盲目的。但是,在某个时刻,我必须提取所有具有双值的条目。您将如何实现这样的功能?将信息封装在对象中,然后获得所述对象的列表。比如说, public final class TableRow{ private final String name; private final int age;

我还不太习惯Java。我有一个类,它应该包含一个列表。可以想象,此列表表示表中的一行(列名、特定类型的值):

由于列表的内容应该是灵活的,所以我不能使用类成员变量。
基本上,程序员对内容是盲目的。但是,在某个时刻,我必须提取所有具有双值的条目。您将如何实现这样的功能?

将信息封装在对象中,然后获得所述对象的列表。比如说,

public final class TableRow{
    private final String name;
    private final int age;
    private final double weight;
    private final String weightUnit;

    public TableRow(String name, int age, double weight, String weightUnit){
        ...
    }

    // include accessors
}
然后另一个类中的列表声明会这样

List<TableRow> list = new ArrayList<TableRow>();
List List=new ArrayList();
您可以使用

Map m=newhashmap();

您可以创建一个表示列的类,然后将行表示为列列表:

public class Column {
    private String name;
    private Class clazz;
    private Object value;

    public Column(String name, Class clazz, Object value) {
        this.name = name;
        this.clazz = clazz;
        this.value = value;
    }

    // ...
}
您的数据将是:

List<Column> row = new ArrayList<Column>();
row.add(new Column("Name", String.class, "Oskar"));
row.add(new Column("Age", Integer.class, 28));
row.add(new Column("weight", Double.class, 75.5));
row.add(new Column("weightUnit", String.class, "kilogram"));
List row=new ArrayList();
添加(新列(“Name”,String.class,“Oskar”);
添加(新列(“年龄”,Integer.class,28));
添加行(新列(“重量”,双级,75.5));
添加行(新列(“重量单位”,String.class,“千克”);
但是,看起来您正在尝试创建一个数据库,因此您可能希望有一个
类,该类将有一个
列表
,其中
列描述符
与上面的
类类似,只是没有值——只有名称和类型。然后可能有一个
TableRow
类,该类将有一个所有值的
列表。向表中添加行时,需要验证值是否与该表的列类型兼容


您可能想看看
JDBC
设计灵感的方式。支持所有需要的通用性、功能性,并使其具有类型安全性是一项艰巨的工作。除非在
ORM
工具、自定义报告解决方案或实际数据库中确实需要此功能,否则您可能需要重新考虑设计,并询问是否需要如此多的通用性。(“做可能可行的最简单的事情。”)

如果不想创建类。试试这样的

ArrayList<List> arrayList = new ArrayList<>();
arrayList.add(Arrays.asList("String 1", 2011.57, 5));
arrayList.add(Arrays.asList("String 2", 201.01, 16));
arrayList.add(Arrays.asList("String 3", 2012, NULL));
arrayList.add(Arrays.asList("String 4", 20.1, 19));

for (List list : arrayList) {
    System.out.println(
             list.get(0) + " " + list.get(1) + " " + list.get(2));
}
ArrayList ArrayList=new ArrayList();
add(Arrays.asList(“string1”,2011.57,5));
add(Arrays.asList(“string2”,201.01,16));
add(Arrays.asList(“string3”,2012,NULL));
add(Arrays.asList(“string4”,20.1,19));
用于(列表:arrayList){
System.out.println(
list.get(0)+“”+list.get(1)+“”+list.get(2));
}
在上面的例子中。您可以创建一个ArrayList,它分别存储具有{String,Double,Integer}数据类型的列表集合

注意:在
Java
中创建不同类型的列表是不好的做法


但是它会是什么样子呢?我如何获得对象的类型信息?你能提供一些示例代码吗?正如我所说,我事先不知道内容。最终用户将决定任何条目的名称和类型。他可能希望储存关于蜂鸟的信息,而不是人类蜂鸟的年龄和重量……嗯……令人困惑。对我来说,这听起来像是一个糟糕的设计。嗯,这就像提供了一个空的excel表-你之前不知道用户将放入什么,但你必须根据数据类型以正确的方式处理它…不确定,这有什么帮助?hashmap将包含什么?hashmap将包含例如Name作为key和Oscar作为value,等等,但是每个值都是string?作为字符串的键很好,但是值应该是不同的可能类型。我想
Map
可能会起作用。然后是一个
列表
,谢谢!这就是我一直在寻找的解决方案。但我也会考虑是否有不太一般的方法。我没想到这项任务会如此困难。
List<Column> row = new ArrayList<Column>();
row.add(new Column("Name", String.class, "Oskar"));
row.add(new Column("Age", Integer.class, 28));
row.add(new Column("weight", Double.class, 75.5));
row.add(new Column("weightUnit", String.class, "kilogram"));
ArrayList<List> arrayList = new ArrayList<>();
arrayList.add(Arrays.asList("String 1", 2011.57, 5));
arrayList.add(Arrays.asList("String 2", 201.01, 16));
arrayList.add(Arrays.asList("String 3", 2012, NULL));
arrayList.add(Arrays.asList("String 4", 20.1, 19));

for (List list : arrayList) {
    System.out.println(
             list.get(0) + " " + list.get(1) + " " + list.get(2));
}