标签: java-8

将带有 zoneId 的字符串本地日期转换为 UTC Offsetdate JAVA

我正在尝试将巴西本地日期转换为 UTC 格式。我已经开发了我的解决方案,但我相信它可以改进。我一直在寻找其他问题,但没有成功。

我的问题是,当我使用以下方法处理Date对象时:

Instant endDateTime = questionDate.toInstant();
Run Code Online (Sandbox Code Playgroud)

我收到一个 UTC 日期,"2017-11-16T00:00:00Z"但这应该是巴西本地日期(不正确,因为它有尾随"Z"),当我尝试转换为 UTC 时,我收到相同的输出。

另一方面,如果我使用ZoneDateTimeclass 并使用LocalDateTimeobject构建日期,我会在输出中丢失秒数:"2017-11-16T02:00Z". 当我使用时会发生这种情况:

LocalTime.of(hour, minutes, seconds);
Run Code Online (Sandbox Code Playgroud)

我搜索LocalTime课堂,我认为这是因为分钟或秒,0但我不确定。

解决方案的问题:

  1. 响应没有秒
  2. 我希望 Java 8 有一组功能可以让这更简单明了

前提:

  • 我不能使用 Joda 库
  • 结果必须是OffsetDateTime
  • 输入:日期 "2017-11-16"
  • 输出: "2017-11-16T02:00:00Z"

这是我的解决方案:

private static OffsetDateTime processDate(Date questionDate) {
  Instant endDateTime = questionDate.toInstant();
  ZoneId zoneId = ZoneId.of(ZONEID);
  String [] date = endDateTime.toString().split("T");
  LocalDateTime localDateTime = convertLocalTimeToUtc(date);
  ZonedDateTime zonedDateTime = …
Run Code Online (Sandbox Code Playgroud)

java date utc java-8 java-time

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

使用 lambda 表达式创建嵌套的哈希图

我想HashMap使用来自ArrayListJava输入的 lambda 表达式创建三层。三层是年、月和周,这是我的前两层代码。但是,在第二层我收到一个错误(第一层工作正常)。

public HashMap<Integer,HashMap<Integer,HashMap<Integer,AbcDetails>>> createHashMapOfTimePeriod(List<AbcDetails> abcDetails){

    Map<Integer,List<AbcDetails>>result1=abcDetails.stream().collect(Collectors.groupingBy(AbcDetails::getYear));
    Map<Integer,Map<Integer,AbcDetails>>reult2=result1.entrySet().stream().collect(Collectors.groupingBy(e -> (e.getValue().stream().collect(Collectors.groupingBy(AbcDetails::getWeek)))));

    return null;

}
Run Code Online (Sandbox Code Playgroud)

java collections lambda hashmap java-8

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

Java 8 流 - 沿流操作使用原始流对象

我正在Stream对一组Integers运行操作。
然后我创建了一个Cell对象来进行一些操作并应用一个过滤器,
我想创建一个只有有效s的Integerto的映射。CellCell

沿着这条线的东西:

List<Integer> type = new ArrayList<>();

Map<Integer, Cell> map =
  list.stream()
    .map(x -> new Cell(x+1, x+2))        // Some kind of Manipulations
    .filter(cell->isNewCellValid(cell))  // filter some
    .collect(Collectors.toMap(....));
Run Code Online (Sandbox Code Playgroud)

是否可以沿流操作使用原始流对象?

java java-8 java-stream

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

@Accessors(fluent = true) 来自 lombok 和 mapstruct

我有一个下游服务,我想将其 bean 映射到我的 bean。但是使用mapstruct似乎有问题。

来自下游服务的 Pojo(我无法更改其定义)

@ToString
@Getter
@Setter
@Accessors(fluent = true)
public class PojoA {
   private String stringA;
   private int integer;
}
Run Code Online (Sandbox Code Playgroud)

我想把它转换成 PojoB

@Setter
@Getter
@ToString
public class PojoB {
    private String stringB;
    private int integer;
}
Run Code Online (Sandbox Code Playgroud)

映射器接口

@Mapper
public interface PojoMapper {

    PojoMapper INSTANCE = Mappers.getMapper(PojoMapper.class);
    @Mapping(source = "stringA", target = "stringB")
    PojoB pojoAToPojoB(PojoA pojoA);
}
Run Code Online (Sandbox Code Playgroud)

这失败了,因为它无法找到 getter 作为 fluent 从 getter 中删除前缀,我知道 mapstruct 生成映射器接口的实现并使用 bean 规范(即获取和设置前缀)

有没有办法克服它?

lombok java-8 mapstruct

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

如何编写 system.out.println 作为方法引用?

我正在使用 foreach 迭代一个集合,我正在使用 intelliJ IDE。

queue.forEach(s->{
            System.out.println(s);
        });
Run Code Online (Sandbox Code Playgroud)

我在这里收到警告“可以用方法引用替换..”

谁能建议我如何在这里使用方法参考?

java-8

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

RequestContextHolder.getRequestAttributes() null - Spring Security + 多租户

实施 spring 安全性(基本表单身份验证)后,我无法使用 获取当前请求RequestContextHolder.getRequestAttributes(),之前工作正常。

问题是 RequestContextHolder.getRequestAttributes() 为空,我需要从登录请求中获取额外的参数(租户 ID)才能选择正确的数据库。

这是我的代码:

安全

@EnableWebSecurity
public class Security extends WebSecurityConfigurerAdapter {

    @Autowired
    private MyUserDetailsService myUserDetailsService;

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http

                .authorizeRequests()
                .antMatchers("/assets/**")
                    .permitAll()
                .anyRequest().authenticated()
                    .and()
                .formLogin()
                    .loginPage("/dashboard/login")
                    .defaultSuccessUrl("/dashboard/home")
                    .permitAll()
                    .and()
                .logout()
                    .permitAll();
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth)
            throws Exception {
        auth.authenticationProvider(authenticationProvider());
    }

    @Bean
    public DaoAuthenticationProvider authenticationProvider() {
        DaoAuthenticationProvider authProvider
                = new DaoAuthenticationProvider();
        authProvider.setUserDetailsService(myUserDetailsService);
        authProvider.setPasswordEncoder(passwordEncoder());
        return authProvider;
    }


    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder(11);
    }
} …
Run Code Online (Sandbox Code Playgroud)

java hibernate spring-security multi-tenant java-8

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

java 8中的静态变量存储在哪里?

静态变量存储在哪里?据我所知,在 Java 7 中它是 PermGen。但是 java 8 迁移到了 MetaSpace。那么它们是存储在 MetaSpace 中还是存在其他位置?

java static java-8 metaspace

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

“/usr/bin/javac: /lib/ld-linux.so.2: 坏的 ELF 解释器:没有那个文件或目录”

我在 linux 服务器 RHEL 7 中安装了 jdk1.8.0_161 .. 由于“/usr/bin/javac: /lib/ld-linux.so.2: bad ELF interpreter: No such file or目录”

以下是我安装jdk的步骤,

cd /opt/jdk1.8.0_161/
alternatives --install /usr/bin/java java /opt/jdk1.8.0_161/bin/java 2
alternatives --config java

There is 1 program that provides 'java'.

  Selection    Command
-----------------------------------------------
*+ 1           /opt/jdk1.8.0_161/bin/java

Enter to keep the current selection[+], or type selection number: 1

alternatives --install /usr/bin/jar jar /opt/jdk1.8.0_161/bin/jar 2
alternatives --install /usr/bin/javac javac /opt/jdk1.8.0_161/bin/javac 2
alternatives --set jar /opt/jdk1.8.0_161/bin/jar
alternatives --set javac /opt/jdk1.8.0_161/bin/javac

java -version
-bash: /usr/bin/java: /lib/ld-linux.so.2: bad ELF …
Run Code Online (Sandbox Code Playgroud)

linux java-8

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

将嵌套循环转换为流 Java 8

我正在尝试将下面的嵌套循环转换为流 Java 8。

newself2中的每个元素都是一个字符串列表——["1 2","3 4"]需要改为["1","2","3","4"]。

for (List<String> list : newself2) {
    // cartesian = [["1 2","3 4"],["4 5","6 8"]...] list = ["1 2","3 4"]...
    List<String> clearner = new ArrayList<String>();
    for (String string : list) { //string = "1 3 4 5"
        for (String stringElement : string.split(" ")) {
            clearner.add(stringElement);
        }
    }
    newself.add(clearner);
    //[["1","2","3","4"],["4","5","6","8"]...]
}
Run Code Online (Sandbox Code Playgroud)

到目前为止我所尝试的 -

newself2.streams().forEach(list -> list.foreach(y -> y.split(" ")))  
Run Code Online (Sandbox Code Playgroud)

现在我确定如何将内部 for 循环中的拆分数组添加到新列表 for x?

任何帮助是极大的赞赏。

java loops java-8 java-stream

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

是否有一些仅流的方法来确定最大流元素的索引?

我有一个Stream<Set<Integer>> intSetStream.

我可以这样做...

Set<Integer> theSetWithTheMax = intSetStream.max( (x,y)->{ return Integer.compare( x.size(), y.size() ); } ).get( );
Run Code Online (Sandbox Code Playgroud)

...我掌握了其中元素Set<Integer>数量最多的Integer那个。

那太棒了。但我真正需要知道的是,这是第一次SetStream这最大?或者是10日SetStream?还是iSet?其中哪一个元素最多?

所以我的问题是:有没有一些方法-使用Stream API -我可以确定“这是iSetStreamSet传回他们所有的最大价值,为氏Set.size( )呼叫”?

我能想到的最佳解决方案是迭代Stream<Set<Integer>>(使用intSetStream.iterator())并进行手动max( )计算。但我希望学习更多Stream-y 的方法;如果有这样的事情。

java-8 java-stream

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