Rumah  >  Artikel  >  Isih panjang rentetan, tetapi secara terbalik (rentetan terpanjang dahulu)

Isih panjang rentetan, tetapi secara terbalik (rentetan terpanjang dahulu)

王林
王林ke hadapan
2024-02-13 23:57:08521semak imbas

PHP Editor Strawberry membawakan anda masalah pengisihan rentetan yang menarik: menyusun panjang rentetan, tetapi secara terbalik. Iaitu, rentetan terpanjang didahulukan. Masalah ini boleh diselesaikan dengan menggunakan fungsi terbina dalam dan fungsi isihan tersuai. Semasa proses pengisihan, kita perlu mengira panjang setiap rentetan dan menyusunnya mengikut tertib daripada panjang terbesar hingga terkecil. Seterusnya, kami akan memperincikan cara melaksanakan masalah pengisihan rentetan yang menarik ini.

Kandungan soalan

Saya terpaksa membuat latihan di mana saya perlu menulis kaedah orderquestionsbylength() yang sepatutnya menyusun soalan mengikut panjangnya (tertib menurun)

Kod berikut berfungsi (tetapi tidak disusun dalam susunan menurun):

`public void orderQuestionsByLength(){
        Collections.sort(questions,Comparator.comparing(question -> question.getText().length())); 
        for (Question question : questions){                                                       
            System.out.println(question);
        }
    }`

Sebaik sahaja saya menambah .reversed(), idea saya menimbulkan ralat Tidak dapat menyelesaikan kaedah 'gettext' dalam 'objek' Walaupun saya mempunyai kaedah gettext() dan ia berfungsi sebelum menambah .reversed()

Ini membuatkan saya gila kerana saya tidak tahu bagaimana untuk menyelesaikan masalah ini dan gpt mengatakan kod saya betul (bukan bermakna saya harus bergantung pada gpt tetapi saya mempunyai cara lain untuk mengisih integer dalam tertib menurun dan saya menggunakan Tiada apa-apa yang salah dengan return()

Penyelesaian

Kadangkala ini berlaku kerana kaedah pembanding.pembanding tidak dapat membuat kesimpulan dengan betul jenis parameter lambda apabila dirantai dengan .reversed()

Untuk menyelesaikan masalah ini, anda boleh memberikan maklumat jenis eksplisit dalam ungkapan lambda. Begini cara menggunakan kaedah (string question) -> … 修改 orderquestionsbylength.

public void orderquestionsbylength() {
    collections.sort(questions, comparator.comparing((question question) -> question.gettext().length()).reversed()); 
    for (question question : questions) {                                                       
        system.out.println(question);
    }
}

panggilan comparator#reversed.

Perhatikan tatabahasa. Gunakan dalam comparator.comparing 生成比较器后调用 reversed.

  • comparator.comparing 是一个 static Panggilan kaedah untuk menjana contoh (objek).
  • comparator#reversed ialah panggilan kaedah contoh yang menjana objek lain.

Seperti yang dinyatakan dalam jawapan chf , anda mungkin perlu jelas tentang jenis data parameter yang dihantar kepada lambda: ( 字符串问题 ) -> ….

public void orderquestionsbylength()
{
    collections.sort( 
        questions, 
        comparator
            .comparing( ( string question ) -> question.gettext().length() )  // static method call. 
            .reversed()  // instance method call. 
    ); 
    questions.foreach( system.out :: println ) ;  
}

Dengan cara ini, anda boleh menggunakan gelung collections#foreach 和方法引用来折叠 for seperti yang ditunjukkan di atas.

Contoh penuh kod permohonan:

package work.basil.example;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;

public class Infer
{
    public static void main ( String[] args )
    {
        Comparator < Question > comparator =
                Comparator
                        .comparing ( ( Question question ) -> question.text ( ).length ( ) )
                        .reversed ( );

        ArrayList < Question > questions =
                new ArrayList <> (
                        List.of (
                                new Question ( "alpha" , 1 ) ,
                                new Question ( "b" , 2 ) ,
                                new Question ( "gamma" , 3 )
                        )
                );
        questions.sort ( comparator );
        questions.forEach ( System.out :: println );
    }
}

record Question( String text , int points ) { }

Atas ialah kandungan terperinci Isih panjang rentetan, tetapi secara terbalik (rentetan terpanjang dahulu). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam