-- मैं .stream() का उपयोग कर रहा हूं उपयोगकर्ता द्वारा चुने गए नाम से एक सूची को फ़िल्टर करने के लिए और इसे प्रिंट करने के लिए, लेकिन मुझे सही ढंग से प्रिंट करने के लिए क्रमबद्ध सूची नहीं मिल सकती है; यह केवल सफेद स्थान प्रिंट करता है। मुझे लगता है कि यह सूची में सही ढंग से छँटाई नहीं सहेज रहा है। मैं इसे कैसे ठीक करूं?

छात्र खोजक.जावा:

    import java.util.*;
    import java.util.stream.*; //throws error w/o it :(

    public class StudentFinder {

        //Print method
            public static void contactPrint(List<Student> arr) {
                for(int x = 0; x < arr.size(); ++x) {
                    System.out.println("[" + x + "]" + " Name: " + arr.get(x).name + " - ID: " + arr.get(x).id + " - GPA: " + arr.get(x).gpa);
                }// end for loop
            }// end contactPrint()

        public static void main(String[] args) {                

            // "File" to hold Student's field 'name' info
            String[] names = {
                    "Albert Einstein",
                    "Ada Lovelace",
                    "Blaise Pascal",
                    "Bruna Louise",
                    "Caroline Herschel",
                    "Cecilia Payne-Gaposchkin",
                    "Dorothy Hodgkin",
                    "Douglas Junior",
                    "Edwin Powell Hubble",
                    "Elizabeth Blackburn",
                    "Flossie Wong-Staal",
                    "Frieda Robscheit-Robbins",
                    "Geraldine Seydoux",
                    "Gertrude B. Elion",
                    "Ingrid Daubechies",
                    "Irma Sanchez",
                    "Jacqueline K. Barton",
                    "Johannes Kepler",
                    "Lene Vestergaard Hau",
                    "Lord Kelvin",
                    "Maria Mitchell",
                    "Max Planck",
                    "Nicolaus Copernicus",
                    "Niels Bohr",
                    "Patricia S. Goldman-Rakic",
                    "Patty Jo Watson",
                    "Richard Phillips Feynman",
                    "Rita Levi-Montalcini",
                    "Sarah Boysen",
                    "Stephen Hawking",
                    "Werner Karl Heisenberg",
                    "Wilhelm Conrad Roentgen"
            };

            int numStudents = names.length;
            String holdUserInput;

            //Create new Student object students
            List<Student> students = new ArrayList<Student>(); 

            // Initialize List of objects Student students with **CONSTRUCTOR**
            for(int x = 0; x < numStudents; ++x) {
                students.add(new Student(names[x], (100 + x), (double)((2.2 + (x + 2))))); // constructor
            }

            //Prints original object students
            contactPrint(students); 

            //prompt user for input
            System.out.println("Enter the first letter of the student's name:");
            Scanner userInput = new Scanner(System.in);
            holdUserInput = userInput.nextLine();//<<<******INT??? String???********

            //handle user's input
            List<String> studentsNames = 
                    students.stream()
                                   .filter(n -> n.getName().startsWith(holdUserInput.toUpperCase())) 
                                   .sorted(Comparator.comparing(Student::getName))
                                   .map(Student::getName)
                                   .collect(Collectors.toList());

            //print sorted list
            System.out.println(" \n");
            for(int i = 0; i < studentsNames.size(); i++) {
                System.out.println(studentsNames.get(i));
            }

            //end program message to user
            System.out.println("Program Ended.");

        }// end main()
}// end class StudentFinder

छात्र.जावा:

public class Student {

    String name = "";
    int id;
    double gpa;

    // constructor
    public Student(String sName, int sId, double sGpa) {
        name = sName;
        id = sId;
        gpa = sGpa;

    }

    //get name value to main()
    public String getName() {
        return name;

    }

    //get ID value to main()
    public int getId() {
        return id;

    }

    //get GPA value to main()
        public double getGpa() {
            return gpa;

        }
}
-3
Lele Carabina 20 जुलाई 2017, 00:41
5
यह जाने बिना कि students या holdUserInput क्या हैं, हम इसे पुन: पेश नहीं कर सकते हैं, और इस प्रकार हम सलाह नहीं दे सकते कि क्या गलत है।
 – 
Joe C
20 जुलाई 2017, 00:43
1
कृपया एक न्यूनतम प्रतिलिपि प्रस्तुत करने योग्य उदाहरण प्रदान करें जो आपकी समस्या को प्रदर्शित करता हो।
 – 
azurefrog
20 जुलाई 2017, 00:45
मेरा पूरा कोड यह है: link
 – 
Lele Carabina
20 जुलाई 2017, 15:51

1 उत्तर

सबसे बढ़िया उत्तर

मुझे नहीं लगता कि आपकी समस्या छँटाई से आती है ... निम्न कोड जो शायद आपके पास आंतरिक वर्ग के बिना बहुत समान है, काम करता प्रतीत होता है। हमें शेष कोड के बारे में अधिक जानकारी दें और हम मदद करने में सक्षम हो सकते हैं।

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;
import java.util.stream.Collectors;

public class SortTest
{
    public static class Student
    {
        String string;
        public Student(String s) { this.string = s; }
        public String getName() { return this.string; }
    }

    public static void main(String[] args)
    {
        List<Student> students = new ArrayList<Student>();
        students.add(new Student("AA"));
        students.add(new Student("AC"));
        students.add(new Student("AB"));
        students.add(new Student("BA"));
    
        System.out.println("Initial Order of all students: ");
        for(Student student : students) { System.out.print(student.getName() + " "); }

        System.out.print("\nPick your letter: ");
        Scanner scanner = new Scanner(System.in);
        String letter = scanner.next();
        scanner.close();

        List<String> studentNames = students.stream()
        .filter(n -> n.getName().toUpperCase().startsWith(letter.toUpperCase()))   
        .sorted(Comparator.comparing(Student::getName))
        .map(Student::getName)
        .collect(Collectors.toList());
    
        System.out.println("\nNew order of names starting by " + letter + ":");
        for(String name : studentNames) { System.out.print(name + " "); }
    }
}

आउटपुट है:

सभी छात्रों का प्रारंभिक क्रम: AA AC AB BA

अपना पत्र चुनें: a

A से शुरू होने वाले नामों का नया क्रम: AA AC AB

0
Community 20 जून 2020, 12:12
.sorted(Comparator.comparing(Student::getName)) .map(Student::getName) के बजाय, आप केवल .map(Student::getName) .sorted() का उपयोग कर सकते हैं
 – 
Holger
20 जुलाई 2017, 13:15
मैंने बस यही कोशिश की; यह काम नहीं किया। यह बहुत अजीब है। यह दो रिक्त पंक्तियों को प्रिंट करता है, प्रत्येक चुने हुए अक्षर से शुरू होने वाले नामों की संख्या, लेकिन यह नामों को प्रिंट नहीं करता है... :(
 – 
Lele Carabina
20 जुलाई 2017, 16:01
मैं नामों की एक सूची मुद्रित करने की कोशिश कर रहा हूं जो चुने हुए पत्र से शुरू होता है, न कि पत्र ही :)
 – 
Lele Carabina
20 जुलाई 2017, 16:02
मेरी पोस्ट को संपादित किया, स्कैनर जोड़ा + तुलना के लिए नाम और अक्षर को अपरकेस में रखा। यदि आप "ए" और "ए" की तुलना करते हैं, तो यदि आप नहीं जानते हैं तो यह काम नहीं करता है।
 – 
Maaaatt
20 जुलाई 2017, 16:12
हां, मैंने उस पर ध्यान दिया और .toUpperCase() जोड़ा। धन्यवाद। मेरे कोड में scanner है। मैंने अभी पोस्ट संपादित किया है और पूरा कोड जोड़ा है।
 – 
Lele Carabina
20 जुलाई 2017, 16:28