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

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

王林
Lepaskan: 2024-02-13 23:57:08
ke hadapan
587 orang telah melayarinya

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);
        }
    }`
Salin selepas log masuk

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);
    }
}
Salin selepas log masuk

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 ) ;  
}
Salin selepas log masuk

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 ) { }
Salin selepas log masuk

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!

Label berkaitan:
sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan