Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.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 转换列表<;字符串>;到列表<;MyObject>;,其中MyObject包含一个表示顺序的int_Java_Design Patterns - Fatal编程技术网

Java 转换列表<;字符串>;到列表<;MyObject>;,其中MyObject包含一个表示顺序的int

Java 转换列表<;字符串>;到列表<;MyObject>;,其中MyObject包含一个表示顺序的int,java,design-patterns,Java,Design Patterns,是否有一个模式或内置功能我丢失了,或者我应该像这样循环 public List<MyObject> convert(List<String> myStrings){ List<MyObject> myObjects = new ArrayList<MyObject>(myStrings.size()); Integer i = 0; for(String string : myStrings){ MyOb

是否有一个模式或内置功能我丢失了,或者我应该像这样循环

public List<MyObject> convert(List<String> myStrings){

    List<MyObject> myObjects = new ArrayList<MyObject>(myStrings.size());

    Integer i = 0;
    for(String string : myStrings){
        MyObject myObject = new myObject(i, string);
        myObjects.add(object);
        i++;
    }
    return myObjects;
}
公共列表转换(列表mystring){
List myObjects=newarraylist(myStrings.size());
整数i=0;
for(字符串:myStrings){
MyObject MyObject=新的MyObject(i,字符串);
myObjects.add(对象);
i++;
}
返回对象;
}
这是因为我需要将列表持久化到数据库并保留顺序。

您可以使用:

List myObjects=Lists.transform(myStrings,
新函数(){
私有整数i=0;
公共MyObject应用(字符串stringValue){
返回新的MyObject(i++,stringValue);
}
});
实际上,它只是将迭代引入到库中。就实际编写的代码而言,在Java8引入闭包之前,情况大致相同


但是,您应该知道,像这样使函数有状态(使用
i
)是一种不好的形式,因为现在它应用于列表的顺序很重要。

您的代码可以正常工作。如果您使用groovy,它会更干净一些,因为您可以执行以下操作:

def i = 0;
def myObjects = myStrings.collect {str -> new MyObject(i++, str);}

或者像马克·彼得的代码一样的番石榴。但是,如果您不想切换语言或导入新的库,那么您的代码是非常好的。

Java 8中提供的闭包和lambda应该允许Java具有映射器和减缩器函数之类的功能(如MapReduce)。事实上,如果您正在关注Project Lambda的最新开发,您将看到许多示例Lambda代码在集合上运行

e、 g


但在此之前,您在问题中发布的代码就足够了

我将回应上面glowcoder的评论,并想知道为什么您需要转换列表(根据定义,它具有排序信息),而不是简单地将数据直接持久化到数据库

尽管如此,我仍将提供一个简洁的代码片段:

for (final String string : myStrings) {
    myObjects.add(new MyObject(myObjects.size(), string));
}

我可以很容易地看出它的作用,因此它的代码很好。我不知道这有什么内置功能……但如果有,我怀疑它会比您刚才所做的更简单。如果说有什么区别的话,正常人就更难理解了。编辑:番石榴贴子正好证明了我的观点。@Chad La Guardia lol,干杯,我将以此作为补充。您需要将订单存储在Java中,而不是直接发送到数据库吗?@glowcoder,因为它们是单独的hibernate实体,我想保留order permanentlyCommons collections有一个类似的方法:@Mark Peters我真的喜欢这样,特别是如果新列表可能无法完全读取,因为它只在需要时进行转换。这些“免费优化”之一。@Mac:是的,这是一个强大的功能,它是底层列表的“实时视图”。然而,这无疑突出了使函数有状态的危险:您真的不知道函数应用于值的顺序!但那不是我想要的
Collections.sort(people, 
                 #{ Person x, Person y -> x.getLastName().compareTo(y.getLastName()) });
for (final String string : myStrings) {
    myObjects.add(new MyObject(myObjects.size(), string));
}