标签: java-8

使用Java Streams使用通用条件筛选给定列表中的对象

我需要从给定的超级列表中获取子列表,如下所述.

假设我有一个"Person"对象的超级列表,如下所示:

List<Person> personsList = new ArrayList<>();
personsList.add(new Person("John", 28));
personsList.add(new Person("Paul", 29));
personsList.add(new Person("Adam", 30));
personsList.add(new Person("Peter", 31));
personsList.add(new Person("Kate", 32));
personsList.add(new Person("John", 67));
personsList.add(new Person("Paul", 68));
personsList.add(new Person("Adam", 69));
Run Code Online (Sandbox Code Playgroud)

让Person类定义如下:

class Person {
    public String name;
    public int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return name + ": " + age;
    }
}
Run Code Online (Sandbox Code Playgroud)

通过使用Java Streams API,如何获取包含以下条目的子列表(请注意,必须获取具有相同名称的对象的重复实例):

John : 28
John : 67
Paul : 29 …
Run Code Online (Sandbox Code Playgroud)

java java-8 java-stream

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

是否可以使用流将此方法转换为java 8?如果有,怎么样?

假设我有一个方法,它采用两个double类型的数组,而不是采用double类型的局部变量'sum',初始值为零.之后,for循环从开始到结束迭代并像这样减去a1 [i] - b [i]并将结果保存到另一个名为minus的局部变量中.比减去*减去并将它与sum变量和末尾总和中的现有值相加.我很困惑如何使用流在java 8中实现这一点.有谁能够帮我?

public double calculate(double[] a1, double[] b2, int start, int end) {
  double sum = 0.0;
  for(int i = start; i < end; i++) {
    final double minus = a1[i] - b2[i];
    sum += minus * minus;
  }
  return sum;
}
Run Code Online (Sandbox Code Playgroud)

java-8

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

你可以收集(加入())而不映射到字符串吗?

我正在阅读java 8,并且作者说如果你有一个覆盖toString方法的类,那么在进行collect(joined())时你不需要将流映射到字符串.一个例子:

    public static void main(String... args) {
        List<Person> people =
        Arrays.asList(
                new Person(23, "Paul"),
                new Person(23, "John"),
                new Person(23, "Greg"),
                new Person(24, "Greg"),
                new Person(25, "Paul")
        ); // Person overrides toString

        String peopleString = people
                .stream()
                .collect(Collectors.joining());

        System.out.println(peopleString);

    }
Run Code Online (Sandbox Code Playgroud)

但是,这不起作用,只有这样:

String peopleString = people
                .stream()
                .map(Person::toString)
                .collect(Collectors.joining());
Run Code Online (Sandbox Code Playgroud)

工作,所以这本书错了吗?此外,为什么他说(我改变了一点措辞):

另请注意,如果某个类有一个toString方法返回一个字符串,您将获得相同的结果,而无需使用提取名称的函数映射原始流.

当每个对象应该继承toStringObject

java java-8 java-stream

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

使用Java8列出地图

我想将对象列表转换为Map,
我正在尝试使用Java 8的流API来实现,
但遇到2个错误,其中1个是导入错误,1个是List到Map的转换代码。

导入地图界面时出错-
The import java.util.Map conflicts with a type defined in the same file.

转换码错误-

The type Map is not generic; it cannot be parameterized with arguments <String, BigDecimal>
Run Code Online (Sandbox Code Playgroud)

以下是我的代码-

public class Developer {

    private String name;
    private BigDecimal sal;
    private int age;

    /**
     * @param name
     * @param sal
     * @param age
     */
    public Developer(String name, BigDecimal sal, int age) {
        super();
        this.name = name;
        this.sal = sal;
        this.age = age;
    }

    /**
     * @return the …
Run Code Online (Sandbox Code Playgroud)

java java-8 java-stream

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

由于java 8中方法的最大结果,如何获取Object

我想通过java8的lambda表达式重写下面的for-loop语句.

public class Test {

    List<ObjectTest> lst;

    public int operation(int a, int b) {
        return a * b;
    }

     int max = 0;
     ObjectTest suitableObj = null;
     for(ObjectTest obj:lst) {
        int result = operation(obj.getA(), obj.getB());
        if(result > max) {
            suitableObj = obj;
            max = result;
        }
     }
}
Run Code Online (Sandbox Code Playgroud)

lambda表达式怎么可能?

java java-8

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

在Java中用逗号分隔的String创建枚举列表

我需要从逗号分隔的String创建枚举列表.我在属性文件中有一些配置,主要是列表HttpStatus

喜欢:

some.config=TOO_MANY_REQUESTS,GATEWAY_TIMEOUT,BAD_GATEWAY 
Run Code Online (Sandbox Code Playgroud)

此配置可以绑定到LIST,如下所示:

@Value("#{'${some.config}'.split(',')}")
private List<HttpStatus> statuses;
Run Code Online (Sandbox Code Playgroud)

现在可以用我的一行代码完成.我收到的字符串如下:

 @Bean(name = "somebean")
 public void do(@Value("${some.config:}") String statuses) throws IOException {

        private List<HttpStatus>  sList = StringUtils.isEmpty(statuses) ? 
        globalSeries : **Arrays.asList(statuses.split("\\s*,\\s*"));**

 }
Run Code Online (Sandbox Code Playgroud)

Arrays.asList(series.split( "\ S*,\ S*")); 将创建一个字符串列表,现在我可以创建一个枚举列表,否则我需要迭代临时列表然后创建一个枚举列表.

java spring-el java-8 spring-config

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

使用java 8流将List <E>转换为Map <String,List <String >>

我正在寻找一些帮助将对象列表转换为Map<String, List<String>>.

class Person {   
    private String name;    
    private int age;
}
Run Code Online (Sandbox Code Playgroud)

我有一个List<Person>,我想收集Map<int, List<String>>关键是年龄和价值是同龄人的名单.

我试过这些线但是没有用

persons.stream().collect(Collectors.groupingBy(p -> p.getAge()), );
Run Code Online (Sandbox Code Playgroud)

java java-8 java-stream

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

如何使用java库减少IPV4地址?

我正在将nodejs代码转换为Java8.

在节点中有代码如下所示

  var ipToEndAt = ippp.prev("192.168.1.225"); 
Run Code Online (Sandbox Code Playgroud)

结果ipToEndAt"192.168.1.224"

我需要将此行转换为java代码.我搜索了SubnetUtils库,但找不到合适的东西.

类似我还需要将ip地址增加1

任何人都可以建议一个库或代码片段?这将是最好的

java ipv4 java-8

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

使用Java lambda或流将POJO列表转换为其ID列表

我正在努力拓宽我的Java视野并开始实际编写Java 8+代码.我有一个情况,我有一个POJO列表(每个POJO实例都有一个id : Long字段),我需要生成一个List<Long>代表他们所有的ids.这是我的代码完美无缺:

List<Fizzbuzz> fizzbuzzes = getFizzbuzzes();
List<Long> fbIds = new ArrayList<>();
for(Fizzbuzz fb : fizzbuzzes) {
    fbIds.add(fb.getId());
}
Run Code Online (Sandbox Code Playgroud)

我想知道是否有更"现代"的Java 8+方式(lambdas或集合技巧,流媒体等)来编写这段代码.任何想法还是这样的好事?

java collections lambda java-8 java-stream

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

自定义功能接口SummaryStatistics

我有一个基本的SpringBoot应用程序.使用Spring Initializer,JPA,嵌入式Tomcat,Thymeleaf模板引擎和包作为可执行JAR文件我想创建一个基于POJO的自定义SummaryStatistics,它有2个字段,price和updateDate.此统计数据应该是最小/最大价格和最小/最大价格的日期.

public class MenuPriceSummaryStatistics implements Consumer<MenuPrice> {

    private long count;
    private double sum;
    private double sumCompensation; // Low order bits of sum
    private double simpleSum; // Used to compute right sum for non-finite inputs
    private double min = Double.POSITIVE_INFINITY;
    private double max = Double.NEGATIVE_INFINITY;

    private Date maxDate;
    private Date minDate;

    public MenuPriceSummaryStatistics() {
    }

    /**
     * Combines the state of another {@code DoubleSummaryStatistics} into this one.
     *
     * @param other
     *            another {@code DoubleSummaryStatistics}
     * @throws NullPointerException
     *             if …
Run Code Online (Sandbox Code Playgroud)

lambda functional-programming java-8 java-stream functional-interface

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