【问题标题】:How can i write a function for a deck class toString method [duplicate]我如何为甲板类 toString 方法编写函数[重复]
【发布时间】:2020-01-16 04:17:51
【问题描述】:

基本上我有这个 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;
    } 

【问题讨论】:

  • 可以说,Java 8 中最被低估的新增功能之一,StringJoiner
  • 我会更担心sortshuffle。只是重新安排甲板打印出来,呃。如果您不能提前使用已排序的卡片组,请至少制作一份副本并对其进行排序。

标签: java lambda expression


【解决方案1】:

根据 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 的建议创建一个副本。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 唯一的问题是卡片组是卡片类型,因为我有一个自定义卡片对象,它不像其他传递的参数那样。
    • 是的,现在我已经编辑了解决方案。
    猜你喜欢
    • 2013-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-29
    • 2012-12-13
    • 1970-01-01
    • 2012-02-14
    • 1970-01-01
    相关资源
    最近更新 更多