如何为卡组类toString方法编写函数

时间:2020-01-16 04:17:51

标签: java lambda expression

基本上,我有这个toString方法来显示排序的卡片。本质上,如果我有一副完整的纸牌,这就是输出的样子。

{Ace of Clubs | Two of Clubs | Three of Clubs | Four of Clubs | Five of Clubs | Six of Clubs | Seven of Clubs | Eight of Clubs | Nine of Clubs | Ten of Clubs | Jack of Clubs | Queen of Clubs | King of Clubs | Ace of Diamonds | Two of Diamonds | Three of Diamonds | Four of Diamonds | Five of Diamonds | Six of Diamonds | Seven of Diamonds | Eight of Diamonds | Nine of Diamonds | Ten of Diamonds | Jack of Diamonds | Queen of Diamonds | King of Diamonds | Ace of Hearts | Two of Hearts | Three of Hearts | Four of Hearts | Five of Hearts | Six of Hearts | Seven of Hearts | Eight of Hearts | Nine of Hearts | Ten of Hearts | Jack of Hearts | Queen of Hearts | King of Hearts | Ace of Spades | Two of Spades | Three of Spades | Four of Spades | Five of Spades | Six of Spades | Seven of Spades | Eight of Spades | Nine of Spades | Ten of Spades | Jack of Spades | Queen of Spades | King of Spades}

我目前通过一个简单的循环来完成此操作,该循环将花括号放在开始处,并循环计算甲板中有多少个元素,并添加deck.get(i).getCard()+“ |”的输出。最后从末尾减去三个字符,然后放另一个花括号。但这不是一个很好的解决方案,而是一个程序化的解决方案,我喜欢优雅的解决方案,并且我认为有些功能可以满足这种目的,但是我真的不知道lambda表达式或其中的任何一个,所以我想知道是否有人可以走路通过我如何做到这一点。在下面,您将找到我当前的解决方案。感谢您的帮助!

public String toString(){
        Collections.sort(deck);

        String result = "{";
        for(int i = 0; i < deck.size(); i++){
            result += deck.get(i).getCard() + " | ";
        }

        if(deck.size() == 0){
            return "{}";
        }

        result = result.substring(0, result.length() - 3);
        result += "}";

        shuffle();
        return result;
    } 

2 个答案:

答案 0 :(得分:2)

基于MadProgammer的建议,我对StringJoiner(我不知道存在)进行了一些试验。

这是一种实现方法:

List<String> deck = new ArrayList<>();
deck.add("Ace of Clubs");
deck.add("Two of Clubs");
deck.add("Three of Clubs");

StringJoiner stringJoiner = new StringJoiner("|", "{", "}");
for (String card : deck) {
  stringJoiner.add(card);
}
System.out.println(stringJoiner.toString());

这给出了输出:

{Ace of Clubs|Two of Clubs|Three of Clubs}

那表示我不确定为什么您会使用toString方法洗牌,因为那没有意义?如果是用于打印,则按照Maarten的建议创建副本。

答案 1 :(得分:2)

使用Java Lamda表达式,您可以用更少的代码和精力来获得预期的结果。 喜欢:

public String toString(){
        Collections.sort(deck);
        String result = "{"+ deck.stream().map(element->element.getCard()).collect(Collectors.joining("|")) + "}";
        shuffle();
        return result;

    } 
相关问题