Java 在一个函数中将具有不同数据类型的不同集合转换为由指定分隔符分隔的字符串

Java 在一个函数中将具有不同数据类型的不同集合转换为由指定分隔符分隔的字符串,java,algorithm,generics,Java,Algorithm,Generics,比如说 带定界符的集合{1,2,3,4,5}@ 我想要一个返回字符串1@2@3@4@五, 棘手的是,我有很多不同的场景 Set<Integer>, Set<String>, Set<Long> and so on. Set,Set,Set等等。 我知道我可以使用循环在单独的函数中完成。但我不想太单调乏味,只想在一个函数中使用Java泛型或任何有帮助的东西。我做了一些脑力激荡,但没有成功( 任何想法都值得赞赏!编辑:是比这更好的主意 这并不是特别好,但假设

比如说 带定界符的集合{1,2,3,4,5}@ 我想要一个返回字符串1@2@3@4@五,

棘手的是,我有很多不同的场景

Set<Integer>, Set<String>, Set<Long> and so on. 
Set,Set,Set等等。
我知道我可以使用循环在单独的函数中完成。但我不想太单调乏味,只想在一个函数中使用Java泛型或任何有帮助的东西。我做了一些脑力激荡,但没有成功(

任何想法都值得赞赏!

编辑:是比这更好的主意

这并不是特别好,但假设您的集合包含您想要连接其toString表示的对象,它就可以工作了

public String concatenateSet(Set<?> set) {
    return set.stream()
            .map(Object::toString)
            .reduce((previous, current) -> previous + "@" + current)
            .orElse("");
}
公共字符串连接集(Set){
返回set.stream()
.map(对象::toString)
.减少((上一个,当前)->上一个+“@”+当前)
.orElse(“”);
}
逐步:

调用stream()可获取集合中的项目流

调用映射(Object::toString)对集合的每个项调用toString

调用reduce((previous,current)->previous+“@”+current)将每个对象的toString表示连接起来,并在每个项之间使用@作为分隔符


调用orElse(“”)将确保返回一个空的sting,例如,如果集合是空的

您考虑过了。您可以将集合作为参数,它将覆盖所有类型的集合。只需确保您的对象实现toString()

您可以使用库的class方法

例如:

Set<Integer> theSet = new HashSet<Integer>();
theSet.add(1);
theSet.add(2);
theSet.add(3);
theSet.add(4);
theSet.add(5);
System.out.println(StringUtils.join(theSet,'@'));
Set theSet=newhashset();
本组增加(1);
本组增加(2);
本组增加(3);
本集增补(4);
本组增加(5);
System.out.println(StringUtils.join(theSet,@');

输出:1@2@3@4@5

我认为op是在寻找函数返回的字符串,而不是连接集的sysout。这两种方法都是一样的。它们只需要一个函数来处理任何类型的对象集。从技术上讲,你是正确的……修复了它。我没有投反对票,但你错过了广告在集合上的d方法调用
Set<Integer> theSet = new HashSet<Integer>();
theSet.add(1);
theSet.add(2);
theSet.add(3);
theSet.add(4);
theSet.add(5);
System.out.println(StringUtils.join(theSet,'@'));