在Java8中有很多有用的新东西。例如,我可以用一个流遍历一系列对象,然后对Object
实例的特定字段的值求和。
public class AClass {
private int value;
public int getValue() { return value; }
}
Integer sum = list.stream().mapToInt(AClass::getValue).sum();
因此,我想问的是,是否有任何方法可以构建一个String
,将toString()
方法的输出连接到一行中。
List<Integer> list = ...
String concatenated = list.stream().... //concatenate here with toString() method from java.lang.Integer class
假设list
包含整数1
、2
和3
,我希望concatenated
是"123"
或"1,2,3"
。
发布于 2014-07-22 17:56:11
接口中有一个收集器joining
。它是Collectors
中的静态方法。
list.stream().map(Object::toString).collect(Collectors.joining(","))
由于toString
的必要调用,所以不是很完美,但可以工作。可以使用不同的分隔符。
发布于 2015-10-29 06:42:46
如果有人想在不使用java8的情况下做到这一点,这里有一个很好的技巧。List.toString()已经返回了一个如下所示的集合:
1,2,3
根据您的特定需求,只要您的列表项不包含[]或,,就可以将其后处理为您想要的任何内容。
例如:
list.toString().replace("[","").replace("]","")
或者,如果您的数据可能包含方括号,则如下所示:
String s=list.toString();
s = s.substring(1,s.length()-1)
会让你得到一个相当合理的产出。
每行可以创建一个数组项,如下所示:
list.toString().replace("[","").replace("]","").replaceAll(",","\r\n")
我使用这种技术从一个小应用程序的列表中制作html工具提示,如下所示:
list.toString().replace("[","<html>").replace("]","</html>").replaceAll(",","<br>")
如果您有一个数组,则改为从Arrays.asList(list).toString()开始
我完全承认这并不是最优的,但它并不像你想象的那样效率低下,而且读起来和理解起来都很简单。但是,它非常不灵活--特别是如果数据中可能包含逗号,就不要尝试用replaceAll分隔元素,如果数据中有方括号,就使用子字符串版本,但是对于数字数组来说,这种方法非常完美。
发布于 2020-01-27 17:59:12
在String API中有一个方法可以用来处理那些“连接字符串列表”的用例,你甚至不需要Stream。
List<String> myStringIterable = Arrays.asList("baguette", "bonjour");
String myReducedString = String.join(",", myStringIterable);
// And here you obtain "baguette,bonjour" in your myReducedString variable
https://stackoverflow.com/questions/24882927
复制相似问题