标签: java-8

Java 8:使用文件的供应商抛出"流已经被操作或关闭"

使用JUnitStream我有以下错误消息:

java.lang.IllegalStateException: stream has already been operated upon or closed
Run Code Online (Sandbox Code Playgroud)

我做了一个研究,可以明确的是没有可能重用流

根据这篇文章:

使用Supplier是可以解决这个问题.

所以我目前的代码如下:

    try (Stream<String> stream =  Files.lines(Paths.get(fileName)) ) {

        Supplier<Stream<String>> supplier = () -> stream;

        logger.info("A");
        logger.info("ABC {}", supplier.get().findFirst().get());
        logger.info("B");
        logger.info("XYZ {}", supplier.get().skip(1050).findFirst().get());
        logger.info("C");

        assertThat(supplier.get().count(), is(1051));

    }
    catch (IOException e) {
        logger.error("{}", e.getMessage());
    }
Run Code Online (Sandbox Code Playgroud)

怎么可以看到我用的是supplier.get()与工作Stream(其与本教程根据),但@Test打印,直到,因此@Test在出现故障supplier.get().skip(1050).findFirst().get(),它仍产生相同的错误消息.

我的代码和教程之间的独特区别,mime通过文件工作,教程围绕数组工作.

有什么特别的编辑工作没有任何问题?

Α

我做了以下版本(根据Eugene的代码段)

   try (Stream<String> stream …
Run Code Online (Sandbox Code Playgroud)

java java-8 java-stream

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

Java 8 - tz数据库时区

我必须在不同的时区使用Java 8日期/时间.例如:

LocalDateTime dateTime = LocalDateTime.of(2017, Month.JUNE, 1, 13, 39);
Instant instant = dateTime.atZone(ZoneId.of("Europe/Paris")).toInstant();
Run Code Online (Sandbox Code Playgroud)

时间帧是到dateTimes之间的实例

但我不想硬编码时区,这总是一个不好的做法

我在Java API中找不到任何常量来表示不同的时区,如https://en.m.wikipedia.org/wiki/List_of_tz_database_time_zones

是否有任何映射,因为它在短区ID?

https://docs.oracle.com/javase/8/docs/api/java/time/ZoneId.html#of-java.lang.String-java.util.Map-

java timezone datetime date java-8

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

Apache ant 1.9.4与Java 1.8的兼容性

Ant 1.9.4与Java 1.8兼容吗?在蚂蚁的文档不是很清楚:它只是说,这是与Java 1.5的最低版本兼容。如何确定它与Java 1.8兼容?谢谢!

java apache ant build.xml java-8

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

Java 8:流优化,在同一个实例上调用两次相同的方法

流是否有缓存或优化相同的调用?

    list.stream()
            .filter(bean ->  manager.find(bean.getID()).getApi() != null)
            .peek(bean -> {
                Entity entity = manager.find(bean.getID());
                //... logic with entity here
                }
            });
Run Code Online (Sandbox Code Playgroud)

manager.find()迭代期间会调用多少次?你能提出更好的方法来实现这段代码吗?

java monads optimization java-8 java-stream

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

如何使方法通用以使用LocalDate和LocalDateTime?

我有一个Java方法如下:

private static boolean isDateBetweenRange(DataSet obj, MyClass dataSource, ConditionContext context) {
    FilterContext fc = dataSource.getData();

    LocalDate dateFieldToCheck = obj.getDate(fc.getDateField()).toInstant()
                                   .atZone(ZoneId.systemDefault()).toLocalDate();
    LocalDate minDate = fc.getMinDateValue();
    LocalDate maxDate = fc.getMaxDateValue();

    if (minDate == null || maxDate == null) {
        minDate = context.getStartDate().toInstant().atZone(ZoneId.systemDefault())
                    .toLocalDate();
        maxDate = context.getEndDate().toInstant().atZone(ZoneId.systemDefault())
                    .toLocalDate();
    }

    boolean result = (dateFieldToCheck.isAfter(minDate) || dateFieldToCheck.isEqual(minDate))
            && (dateFieldToCheck.isBefore(maxDate) || dateFieldToCheck.isEqual(maxDate));

    return result;
}
Run Code Online (Sandbox Code Playgroud)

我也想做同样的逻辑LocalDateTime.LocalDateTime如果我重载方法,它将是完全相同的代码.

如何使该方法通用,LocalDateLocalDateTime使用泛型或任何其他机制?

我如何根据我的类型制作context.getXXXDate()... toLocalDate()toLocalDateTime()使用通用代码?

polymorphism java-8 jsr310 java-time

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

Java8 stream().map().reduce()实际上是map reduce

我在某处使用stream().map().reduce()看到了这段代码.

这个map()函数真的可以并行工作吗?如果是,那么它可以为map()函数启动多少个最大线程数?

如果我对下面的特定用例使用parallelStream()而不仅仅是stream(),该怎么办?

任何人都可以给我一个很好的例子,说明不使用parallelStream()的地方

下面的代码只是从tCode中提取tName并返回逗号分隔的String.

String ts = atList.stream().map(tcode -> {
    return CacheUtil.getTCache().getTInfo(tCode).getTName();
}).reduce((tName1, tName2) -> {
    return tName1 + ", " + tName2;
}).get();
Run Code Online (Sandbox Code Playgroud)

java java-8

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

将null检查转换为Java 8可选

您能举一个例子,说明如何使用Java 8 Optional来转换它.

          Motion motion = new Motion();

           if (null!= site.getLocation() && null != site.getLocation().getLatitude() && null != site.getLocation().getLongitude()) {
                Point p = GeoJson.point(site.getLocation().getLatitude(), site.getLocation().getLongitude());
                motion.setLocation(p);
            }
Run Code Online (Sandbox Code Playgroud)

到目前为止,我这样做

    Motion motion = new Motion();
    Optional<Location> locationOptional = Optional.ofNullable(site.getLocation());
    Point p = locationOptional
          .map(location -> {
                    if (Optional.ofNullable(location.getLatitude()).isPresent() && Optional.ofNullable(location.getLongitude()).isPresent()) {
                        return GeoJson.point(location.getLatitude(), location.getLongitude());
                    }
                    return null;
                })
      .orElse(null);
     motion.setLocation(p);
Run Code Online (Sandbox Code Playgroud)

optional java-8

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

如何保持流中元素的顺序

我想使用下面的spliterator()方法保留数组元素的顺序.

但是,当我运行这个程序时,它正在生成4 2 1 3输出.

   public class Test1 {
    public static void main(String[] args) {
        m1().anyMatch(e -> {
            System.out.println(e);
            return false;
        });
    }

    private static LongStream m1() {
    return StreamSupport.longStream(Arrays.spliterator(new long[] { 1, 2, 3, 4 }), true);
    }
}
Run Code Online (Sandbox Code Playgroud)

请检查并告知我这是否可能.

java java-8 java-stream

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

Java 8将List的每个字段值映射到另一个类似的List

我有2个对象列表:

List<User>
List<UserResource>
Run Code Online (Sandbox Code Playgroud)

对于User类:

public class User {

    private int id;

    private String name;

    private String address; 

    **SETTERS & GETTERS**
}
Run Code Online (Sandbox Code Playgroud)

对于UserResource类:

public class UserResource {

    private String name;

    private String address; 

    **SETTERS & GETTERS**
}
Run Code Online (Sandbox Code Playgroud)

List<User>有数据,我想映射nameaddressUserResourcenameaddress,用java 8个流和lambda,但我不知道该怎么做.

在线搜索相当一段时间,但无法找到类似的问题.就像是:

List<User> users = **data inserted**
List<UserResource> resources = users.forEach(u ->{
    u.setName(users.getName());
    u.setAddress(users.getAddress());
});
Run Code Online (Sandbox Code Playgroud)

我试过像下面这样的东西,但我不使用构造函数,不确定如何解决它.

List<UserResource> userResources = users.stream().map(u -> new UserResource(u.getName(), u.getAddress())).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

lambda java-8 java-stream

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

使用java 8在列表中添加对象

我是Java 8的新手,所以我有一个列表,CollegeGroup我有一个Student有很多组.每个小组都有一个CollegeGroupMember与学生相关联的人.有没有办法在我的列表中返回这些组(studentCollegeGroups)?

final List<CollegeGroup> studentCollegeGroups = new ArrayList<>();
student.getCollegeGroupMembers().forEach(collegeGroupMember -> 
             studentCollegeGroups.add(collegeGroupMember.getCollegeGroup()));
Run Code Online (Sandbox Code Playgroud)

java lambda list java-8

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