标签: java-stream

这可以转换成流一行吗?

我想知道这是否可以作为流函数更整洁地编写:

MyObject myObject = new MyObject();

for (Thing thing : listofThings) {
    myObject = myObject.combine(thing);
}
Run Code Online (Sandbox Code Playgroud)

java java-8 java-stream

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

正确的lambda过滤器实现

我有一个需要的案例

  • map一个对象,如果映射函数抛出异常,我将其映射到null.
  • filternull对象的映射流,如果为null则抛出异常,否则收集到List.

我怎么做到这一点?

list.stream().map(ob-> {
    try {
        // cannot throw only catch 
        return function(ob);
    } catch (Exception e) {
        log.error(e);
        return null;
    }            
}).filter(Objects::isNull).findFirst().orElseThrow(Exception::new);
Run Code Online (Sandbox Code Playgroud)

现在我的问题是我应该如何将上述lambda调整/重构为throw new Exception()on null或者collect(Collectors.toList()).

java lambda list java-8 java-stream

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

java 8中两个列表对象的交集

java 8中的两个列表对象的交集.有人能告诉我我做错了什么吗?

List<Student> originalStudent = new ArrayList<>();
List<Student> newStudent = new ArrayList<>();

List<Student> intersectListStudent = new LinkedList<>()

originalStudent.add(new Student("William", "Tyndale",1));
originalStudent.add(new Student("Jonathan", "Edwards",2));
originalStudent.add(new Student("Martin", "Luther"),3);

newStudent.add(new Student("Jonathan", "Edwards",2));
newStudent.add(new Student("James", "Tyndale",4));
newStudent.add(new Student("Roger", "Moore",5));


originalStudent.forEach(n ->
        newStudent.stream()
                .filter(db -> !n.getName().equals(db.getName()) &&
                        !n.getLastName().equals(db.getLastName()))
                    .forEach(student-> intersectListStudent .add(student)));
Run Code Online (Sandbox Code Playgroud)

java arraylist intersect java-8 java-stream

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

对一个arraylist对象的值进行排序,并在一个lambda中打印它们的多个

我的目标是打印出四个中的两个值 - 名称(字符串)和头发颜色(枚举) - 描述arraylist中的某个对象.问题在于按名称按字母顺序对打印列表进行排序.这一切都必须在一个lambda.

我只是打印出来而没有排序.我已经设置了覆盖但是因为我还在学习,我似乎无法让它工作.

public void printAllNamesColours() {
        people.stream()
            .forEach(n->System.out.println(n.getName() + " " + n.getColour()));
    }

@Override
public int compareTo(Person person) {
        int ret = name.compareToIgnoreCase(person.name);
        if (ret == 0) {
            ret = colour.compareTo(person.colour);
        }
        if (ret == 0) {
            ret = age - person.age;
        }
        return ret;
    }
Run Code Online (Sandbox Code Playgroud)

java sorting lambda arraylist java-stream

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

如何使用java流将平面对象转换为有意对象

我有平面对象POJO:

class FamilyInformation {
  String house;
  String familyMember;
}
Run Code Online (Sandbox Code Playgroud)

使用这样的数据:

[{
 house: "houseName1",
familyMember: "Son"
},
{
 house: "houseName1",
familyMember: "Mom"
},
{
 house: "houseName1",
familyMember: "Dad"
}]
Run Code Online (Sandbox Code Playgroud)

我想将其转换为分层对象POJO:

class House {
  String houseName;
  List<FamilyMember> familyMembers;
}
class FamilyMember {
  String familyMember;
}
Run Code Online (Sandbox Code Playgroud)

我发现的每一条信息都是将其转换为地图.但是我想要List<House>包含List<FamilyMember>任何想法我该怎么办?

java java-8 java-stream

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

使用Stream.reduce反演和不正确

使用Stream.reduce反演求和不正确,这里出了什么问题?

double[] array = {1.0, 2.0};
double iunversionSum = Arrays.stream(array).reduce(0.0, (a, b) -> Double.sum(1.0 / a, 1.0 / b));
Run Code Online (Sandbox Code Playgroud)

输出为.5,但预计为1.5(1/1 + 1/2)

java reduce java-8 java-stream

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

如何在Java中根据多个参数过滤列表中的数据?

我有一个GroupOffices列表

List<GroupOffice> officesOfTheGroup;
Run Code Online (Sandbox Code Playgroud)

我想搜索id是否等于groupOffice.getId(长值),但标签为groupOffice.getLabel(字符串),并将其分配给布尔值。下面的代码运行良好,但是有没有比使用for循环遍历所有项目更好的方法了?

 public GroupOfficeDto saveGroupOffice(GroupOfficeDto groupOfficeDto) {     
            List<GroupOffice> officesOfTheGroup = //some list from db..
            for (GroupOffice go : officesOfTheGroup) {
                if ((!go.getId().equals(groupOfficeDto.getId())) && go.getLabel().equals(groupOfficeDto.getLabel())) {
                    return groupOfficeDto;
                }
        return null:
}
Run Code Online (Sandbox Code Playgroud)

或者如何使用流?如果是这样,使用流是更好的方法吗?

注意:我正在使用Java8

java list stream java-8 java-stream

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

Java流:将<Enum,List <A >>映射到List <B>

我想使用Java流执行以下操作:

我有一个Map<Enum, List<A>>,我想将它转化到List<B>哪里B都有属性Enum, A.

因此,对于该键列表中的每个键和每个项目,我需要创建一个项目B并将所有项目收集到一个项目中List<B>.

如何使用Java流完成?

谢谢!

java java-stream

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

流分类问题

我有一个项目列表(MyDetail对象),我想用流排序方法排序.该对象有3个字段:field1,field2,field3.我想先按field3然后按field2然后按field1排序,所有都按相反顺序排序.所以我写了一个方法sortMyList.

我有一个未排序的项目列表unSortedDetails如下:myDetail1:"20180201",false,false myDetail2:"20180101",false,false myDetail3:"20180101",false,true

在sortMyList(unSortedDetails)之后,我希望我的结果是myDetail3,myDetail1,myDetail2,但实际结果是myDetail1,myDetail3,myDetail2,为什么?

所以,如果我像下面这样实现Comparable for MyDetail,那么它按预期工作.这太奇怪了.我无法弄清楚为什么.谢谢你的帮助!

public List<MyDetail> sortMyList(List<MyDetail> unSortedDetails){
    List<MyDetail> myDetails = unSortedDetails
                        .stream().sorted(Comparator.comparing(MyDetail::getField11).reversed()
                                .thenComparing(MyDetail::getField2).reversed()
                                .thenComparing(MyDetail::getField3).reversed())
                        .collect(Collectors.toList());
                        return myDetails;
                        }

                        @Setter
                        @Getter
                        public class MyDetail{
                            String field1;
                            Boolean field2; 
                            Boolean field3; 
                        }



                @Setter
                @Getter
                public class MyDetail implement Comparable<MyDetail>{
                    String field1;
                    Boolean field2; 
                    Boolean field3; 

                        @Override
                        public int compareTo(MyDetail o) {
                            if (this == o || this.equals(o)) return 0;
                            if (field3) return -1;
                            if (o.field3) return 1;
                            if (!field3 && !o.field3 && field2) return -1;
                            if(!field3 && …
Run Code Online (Sandbox Code Playgroud)

java sorting java-8 java-stream

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

java Streams:收集考虑流是空的

我想使用类似代码构建一个Sort对象Optional:

private Sort buildSort(Collection<String> fields) {
    fields.stream()
        .map(this::buildOrder)
        .collect(Sort.unsorted(), ????, ????);
}
Run Code Online (Sandbox Code Playgroud)

buildOrder 是:

private Order buildOrder(String field) {
    if (field.startsWith("-")) {
        return Order.desc(field.substring(1));
    }
    else {
        return Order.asc(field);
    }
}
Run Code Online (Sandbox Code Playgroud)

我需要返回一个Sort.unsorted()if流为空,或者组合每个Sort对象.

Sort对象有一个and代表构建和连接订单的方法.

Sort.by(sort1)
    .and(sort2)...
Run Code Online (Sandbox Code Playgroud)

所以我需要:

if (stream is empty) then
  return Sort.unsorted
else
  return foreach item in stream:
     Sort.by(item).and(item2).and(item3)...
Run Code Online (Sandbox Code Playgroud)

类别:

org.springframework.data.domain.Sort
org.springframework.data.domain.Sort.Order
Run Code Online (Sandbox Code Playgroud)

注意

我需要使用stream-api!

java java-stream

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

标签 统计

java ×10

java-stream ×10

java-8 ×7

arraylist ×2

lambda ×2

list ×2

sorting ×2

intersect ×1

reduce ×1

stream ×1