根据Java 8嵌套循环转换嵌套循环

时间:2016-04-05 09:21:15

标签: java-8

发现根据java8 lambda表达式更改此代码的难度。 该代码删除具有相同名称的student对象,并将该对象添加到单个条目中。

public List<Student> removeDuplicates(List<Student> studentList)

{

    List<Student> newStudentList=new ArrayList<Student>();
    List<String> studentNames= new ArrayList<String>();
    studentList.stream().forEach(e->studentNames.add(e.getName()));
    List<String> studentNameList= new ArrayList<String>();
        for (Student student: studentList) {
            int count=0;
            for (String sname: studentNames)
            {
                if(student.getName().equals(sname)){
                    count++;
                    }
                    else{
                        count=0;
                    }
                    if(count==1)
                    {   if(!studentNameList.contains(student.getName())){
                        studentNameList.add(student.getName());
                        newStudentList.add(student);
                    }
                    }
                }

            }
}

3 个答案:

答案 0 :(得分:1)

试试这个

    public Stream<Student> removeDuplicates(List<Student> studentList) {
    return studentList
            .stream()
            .collect(
                    Collectors.toMap(Student::getName, s -> s,
                            (fst, snd) -> fst)).values().stream();
}

答案 1 :(得分:0)

您正在使用个流。

public List<Student> removeDuplicates(List<Student> studentList) {
    return studentList.stream()
                      .map(Student::getName)
                      .distinct()
                      .map(x -> studentList.stream()
                                           .filter(y -> y.getName().equals(x))
                                           .findFirst()
                                           .get())
                      .collect(Collectors.toList());
}

答案 2 :(得分:0)

我认为你最终必须使用List,否则你会选择使用Set,根据定义,它是一个唯一的集合。 Set仍然可以成为解决方案的一部分,但是,执行类似

的操作
Set<String> tempUniqueValues = new HashSet<>();
List<String> listWithoutDupes = myList.stream()
        .filter(tempUniqueValues::add)          // filters out non-unique values
        .collect(Collectors.toList());