将某个类的Java集合转换为字符串集合

5
假设有一个类(例如URI),可以使用构造函数和toString()方法将其转换为字符串并从字符串中转换回来。
我有一个ArrayList,我想将它复制到一个ArrayList中,或者反过来。
Java标准库中是否有实用程序函数可以做到这一点?类似于:
java.util.collections.copy(urlArray,stringArray);
我知道有提供该功能的实用程序库,但我不想添加不必要的库。
我也知道如何编写这样的函数,但阅读代码并发现某些人已经在标准库中编写了这些函数是很烦人的。
5个回答

5

我知道您不想添加额外的库,但对于任何从搜索引擎中找到这篇文章的人来说,在Google Collections中可能会使用以下内容:

List<String> strings = Lists.transform(uris, Functions.toStringFunction());

一种方式,以及

List<String> uris = Lists.transform(strings, new Function<String, URI>() {
  public URI apply(String from) {
     try {
       return new URI(from);
     } catch (URISyntaxException e) {
       // whatever you need to do here
     }
  }
});

其他。


4
不,没有标准的JDK快捷键可以完成这个功能。

据我所知,JDK7的fork-join框架原本会有一个并行数组转换函数,但由于缺乏共识,所有这些东西都被删除了。 - Tom Hawtin - tackline
这就是基于共识的标准制定的问题之一 :-( - Stephen C

2

Google的集合库很可能有类似的东西。 - Tom Hawtin - tackline
抱歉,刚看到您不想添加额外的库。 - Eric

0

尝试:

public ArrayList<String> convert(ArrayList<URI> source) {
    ArrayList<String> dest=new ArrayList<String>();

    for(URI uri : source)
        dest.add(source.toString());

   return dest;
}

说真的,内置API会对此提供很多帮助吗?

而且,这不是很面向对象。URI数组可能应该被封装在一个类中。该类可能有一个.asStrings()方法。

此外,如果您正确编写URI类,您可能会发现您甚至不需要(或者甚至不想要)String集合版本。您可能只需要一个getAsString(int index)方法,或者在您的URI类上使用getStringIterator()方法,然后您可以将您的URI类传递给您要传递字符串集合的任何方法。


实际上这非常面向对象。在动态类型语言如JavaScript和Python中,您一直在这样做。静态类型不是面向对象的要求。我可能最终会编写一个像您的convert()函数一样的函数,但它将需要泛型。 "String"是内置类型中的特殊情况:每个对象都有一个toString()方法,但没有要求"MyClass newObj = new MyClass(oldObj.toString());"产生一个newObj.equals(oldObj)的对象。在Python中,"repr"方法可以实现这一点,在JavaScript中,您可以将任何内容转换为JSON并返回。 - Mark Lutton
实际上,非OO问题并不在于它不是一种类型,而是我上面所写的不是方法,而是函数。从基本层面上讲,如果你编写的是函数而不是方法,那么你要么是在修补你无法使其成为OO的东西(因为已有代码),要么就是错误的做法。 - Bill K
顺便说一下,我并不是绝对的意思。有例外情况,比如可重用的实用函数,但即使是这些例外情况也应该在某个时候放在业务类中。无论何时,您向系统提供的对象API都应基于业务逻辑类而不是实用函数和集合,因为无论你怎么努力,它们都不能成为一个体面的API。 - Bill K

0

由于两种类型的集合可能不兼容,因此没有内置方法可以将一个类型的集合转换为另一个类型的集合。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接