2017-08-31 647 views
0
HashSet<Soldier> soldiers;   // it has name, rank, description 

@Override 
public String toString(){ 
    return "Team: " + teamName + "\n" + "Rank: " + getRanking(soldiers) + "\n" 
    + "Team Members Names are: "+"\n" + soldiers.iterator().hasNext(); 
    //last line doesn't work 
    // I also tried soldiers.forEach(System.out::println) but doesn't work 
} 

任何人都可以请我怎么能打印所有名称从Hashset中重写toString方法。谢谢如何遍历对象的HashSet并在ToString方法中打印每个对象的String值?

+1

'soldiers.stream()。地图(对象::的toString).collect(Collectors.joining( “”))'。 –

+1

或者只是'士兵',尽管那样会打印出'[andy,ben,chris]'。 –

+1

只需'String.join(“,”,士兵)'会做。 – Flown

回答

1

如果您使用java 8。这是简单的用流API做:

public class Test { 

    public static void main(String[] args) { 
     Set<String> strings = new HashSet<>(); 

     strings.add("111"); 
     strings.add("113"); 
     strings.add("112"); 
     strings.add("114"); 

     String contactString = strings.stream().map(String::toString).collect(Collectors.joining(",")); 
    } 

} 

如果你想改变一个分隔符,你应该更换Collectiors.joining(",")代码,你需要什么。见也StringJoiner

资料,供你Soldier类有方法getName()

Set<Soldier> soldiers = new HashSet<>(); 
String soldierNames = soldiers.stream().map(Soldier::getName).collect(Collectors.joining("\n")); 

你会得到一个下一个结果:

声浪

马克

大卫

...从士兵值设置

+0

我有三个不同的字符串值的集合。我只是想打印第一个字符串值,这是士兵的名字。我可以用getName()方法访问士兵的名字。另外我想用新行打印每个名字。 – Reboot

+1

@Reboot使用'Soldier :: getName'来代替'String :: toString'。 –

+1

我更新了我的回答 – HAYMbl4