小编rag*_*aga的帖子

Java8将列表<P>转换为Map <Integer,List <P >>

我有List<Person>对象,并希望将其转换Map<Integer, List<Person>>为地图的关键字表示一个人的财产等级.它可能在源列表中具有多个具有相同等级的Person对象,在这种情况下,我想将它们全部分组到List中,与生成的Map中的相应等级相对应.

到目前为止,我有以下代码

public class PersonMain
{
   public static void main(String[] args)
   {
    Person person1 = new Person();
    person1.setName("person1");
    person1.setGrade(1);

    Person person2 = new Person();
    person2.setName("person2");
    person2.setGrade(2);

    Person person3 = new Person();
    person3.setName("person3");
    person3.setGrade(1);

    List<Person> persons = Arrays.asList(person1, person2, person3);

    Map<Integer, List<Person>> personsMap = persons.stream()
            .collect(Collectors.toMap(Person::getGrade, PersonMain::getPerson, PersonMain::combinePerson));

    System.out.println(personsMap);
}
private static List<Person> getPerson(Person p)
{
    List<Person> persons = new ArrayList<>();
    persons.add(p);
    return persons;
}
private static List<Person> combinePerson(List<Person> oldVal, List<Person> newVal)
{
        oldVal.addAll(newVal);
        return oldVal; …
Run Code Online (Sandbox Code Playgroud)

collections java-8

3
推荐指数
1
解决办法
84
查看次数

java 8如何使用集合流来检查对象的存在

我是java 8编程的新手,想知道使用streams()/ lambda重写下面的最佳方法是什么.

class Person {
  String name;
  int age;
  ...
}

public boolean checkPersonAboveAge(List<Person> persons, int age) {
    for (Person person : persons) {
       if (person.age > age) {
          return true;
       }
    }
    return false;
}
Run Code Online (Sandbox Code Playgroud)

到目前为止,我试过:

public boolean checkPersonAboveAge(List<Person> persons, int age) {
    Person p = persons.stream().filter(p -> p.age > age).findAny().orElse(null);
    if (p != null) {
       return true;
    }
    return false;
}
Run Code Online (Sandbox Code Playgroud)

我用lamdba读到了代码的可读性会有所提高,但是看看这个例子我要么没有正确使用这个功能,要么缺少一些东西.

collections java-8

2
推荐指数
1
解决办法
326
查看次数

标签 统计

collections ×2

java-8 ×2