小编mic*_*alk的帖子

删除Map <Long,List <Object >>的条目

经过数小时的研究,我找不到解决问题的方法。我有一个Map<String, List<User>>,我想根据列表中的某些值删除地图上的某些项目。

我必须跟随User类

public class User {
    public String firstName,
    public Integer age

    public boolean is50() {
       return this.age.equals(50);
    }

}
Run Code Online (Sandbox Code Playgroud)

我有一个这样的地图:

Map<String, List<User> myMap = new HashMap<>();

myMap.put("A", new ArrayList<>());
myMap.get("A").add(new User("John", 50));
myMap.get("A").add(new User("Bob", 30));

myMap.put("B", new ArrayList<>());
myMap.get("B").add(new User("Sam", 25));
myMap.get("B").add(new User("Sarah", 56));

myMap.put("C", new ArrayList<>());
myMap.get("C").add(new User("Gill", 15));
myMap.get("C").add(new User("Jim", 20));
Run Code Online (Sandbox Code Playgroud)

现在,如果列表年龄中至少有一个用户为50,我想删除Map的条目。而且,我想使用Java 8功能来实现这一点。

我发现有一个removeIf功能,但不能使其与列表一起使用。

我已经尝试过这样的事情:

Map<String, List<User> filteredMap = myMap
                                 .enrySet()
                                 .removeIf(e -> e.getValue()
                                        .stream()
                                        .filter(user -> user::is50)
                                        .collect(Collectors.toList())
Run Code Online (Sandbox Code Playgroud)

当然那是行不通的:(

例外的输出是一个过滤的地图,所有用户只有B和C键(必须删除A键,因为John有50岁了)

谢谢您的帮助,希望一切都清楚;)

java java-stream

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

此关键字不代表对象

有谁知道为什么我们可以在此处(在subsetOf方法中)遍历“ this”关键字?据我所知,这表示一个JAVA对象。欢迎进行一些广泛的解释,以了解为什么“ this”可以这种方式工作。

public class ArrayListSet<E> implements Set<E> {

    private ArrayList<E> elements;

    public ArrayListSet() {
        elements = new ArrayList<>();
    }

    @Override
    public void add(E e) {
        if (!elements.contains(e))
            elements.add(e);
    }

    @Override
    public void remove(E e) {
        elements.remove(e);
    }

    @Override
    public boolean contains(Object e) {
        return elements.contains(e);
    }

    @Override
    public int size() {
        return elements.size();
    }

    @Override
    public boolean subsetOf(Set<?> other) {
        for (E e : this) {
            if (!other.contains(e))
                return false;
        }
        return true;
    }
}
Run Code Online (Sandbox Code Playgroud)

java

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

ConcurrentHashMap 的compute、computeIfAbsent 和computeIfPresent 方法完全是原子的吗?

整个方法调用是原子的还是只是 BiFunction 执行是原子的?是阻止所有键还是仅阻止同一键上的调用?

java concurrency atomic thread-safety concurrenthashmap

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

io.jsonwebtoken.UnsupportedJwtException:不支持签名声明 JWS

我刚刚将 Jwt 添加到我的应用程序中。当我尝试通过需要授权的邮递员发送获取请求时,出现以下错误:

io.jsonwebtoken.UnsupportedJwtException:不支持签名声明 JWS。

我将正文“授权”作为标题发送,将“承载令牌值”作为值发送。

有谁知道如何解决这个问题?

这是我的 jwt 类:

@Service
public class JwtUtil {

private String SECRET_KEY = "secret";

public String extractUsername(String token) {
    return extractClaim(token, Claims::getSubject);
}

public Date extractExpiration(String token) {
    return extractClaim(token, Claims::getExpiration);
}

public <T> T extractClaim(String token, Function<Claims, T> claimsResolver) {
    final Claims claims = extractAllClaims(token);
    return claimsResolver.apply(claims);
}

public Claims extractAllClaims(String token) {
    return Jwts.parser().setSigningKey(SECRET_KEY).parseClaimsJwt(token).getBody();
}

public Boolean isTokenExpired(String token) {
    return extractExpiration(token).before(new Date());
}

public String generateToken(UserDetails userDetails) {
    Map<String, Object> claims …
Run Code Online (Sandbox Code Playgroud)

java spring spring-security jwt

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

为什么 JsonParser 使用 com.google.gson API 在返回值中给出双引号

我目前正在使用com.google.gson api(使用gson-2.8.5版本)的JsonObject和JsonParser来解析和读取输入JSON的值。

我有 JSON 归档,例如 smaple,"resultCode":"SUCCESS",当我尝试从 json 读取相同的值时,它给出的结果为""SUCCESS"".

我正在阅读的每个值都带有双“”,不知道为什么?您可以参考我的调试屏幕的下面屏幕。

我是 Json 和解析器的新手,这是默认行为吗?

我期待"SUCCESS""S"不像 我 在下图中突出显示的"00000000"那样""SUCCESS""""S""""00000000""

请分享我们如何获得字符串的绝对值而不使用“””双引号字符串的任何想法,它会导致我的字符串比较失败。

在此输入图像描述

String response_result = "{\"response\": {\"head\": {\"function\": \"acquiring.order.create\",\"version\": \"2.0\",\"clientId\": \"201810300000\",\"reqMsgId\": \"56805892035\",\"respTime\": \"2019-09-13T13:18:08+08:00\"},\"body\": {\"resultInfo\": {\"resultCode\": \"SUCCESS\",\"resultCodeId\": \"00000000\",\"resultStatus\": S,\"resultMsg\": \"SUCCESS\"},\"acquirementId\": \"2018080834569894848930\",\"merchantTransId\": \"5683668701112717398\",\"checkoutUrl\": \"http://localhost:8081/crm/operator/operator-search-init.action\"}},\"signature\":\"d+TUYLvt1a491R1e6aO8i9VwXWzVhfNgnhD0Du74f4RgBQ==\"}";
        HttpInvoker.Result result = i.new Result(200, response_result);
    JsonObject jo =  new JsonParser().parse(response_result).getAsJsonObject();

    String resultCode = jo.get("response").getAsJsonObject().get("body").getAsJsonObject().get("resultInfo").getAsJsonObject().get("resultCode").toString();
    String resultCodeId = jo.get("response").getAsJsonObject().get("body").getAsJsonObject().get("resultInfo").getAsJsonObject().get("resultCodeId").toString();
    String resultStatus = jo.get("response").getAsJsonObject().get("body").getAsJsonObject().get("resultInfo").getAsJsonObject().get("resultStatus").toString();
    String checkoutUrl = jo.get("response").getAsJsonObject().get("body").getAsJsonObject().get("checkoutUrl").toString();

    if ( RESULT_CODE_GCASH_SUCCESS.equals(resultCode) …
Run Code Online (Sandbox Code Playgroud)

java json gson jsonparser google-json-api

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

在下面的java代码中获取StackOverflowError

我正在尝试在表上实现软删除,下面是我为实现相同目的所做的代码

@Entity
@Data
@Table(name = "users")
public class User implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;
    private String name;
    private String surname;

    @OneToMany(mappedBy = "user", cascade = CascadeType.ALL)
    private List<Product> products = new ArrayList<>();

}
Run Code Online (Sandbox Code Playgroud)

我在调试时遇到以下异常

Method threw 'java.lang.StackOverflowError' exception. Cannot evaluate com.test.User.toString()
Run Code Online (Sandbox Code Playgroud)

请告知这与我在实体中使用的 Lombok 的影响有关。

java jpa lombok

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

Spring Boot应用程序定期运行方法

我正在使用一个简单的 Spring Boot 应用程序和 RabbitMQ。

但是我不知道如何定期运行一个方法。

这是我的应用程序类

@SpringBootApplication
public class SampleApp {
    @Autowired
    Sender sender;

    public static void main(String[] args) {
        SpringApplication.run(SampleApp.class, args);
    }

    @EventListener(ApplicationReadyEvent.class)
    public void doSomethingAfterStartup() {
        sender.sendMessage();
    }
}
Run Code Online (Sandbox Code Playgroud)

sendMessage方法定义如下

@Scheduled(fixedRate = 3000L)
public void sendMessage() {
    log.info("Sending message...");
    rabbitTemplate.convertAndSend("my-exchange", "my-routing-key", "TEST MESSAGE");
}
Run Code Online (Sandbox Code Playgroud)

然而这个方法只被调用一次,我只能在控制台中看到一行。

我的代码中遗漏了什么?

谢谢。

java spring spring-boot

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

如何从Java中的Apple公钥JSON响应中获取公钥?

我们正在尝试在 iOS 应用程序中添加“使用 Apple 登录”。当客户端工作正常时,我们的后端是用 Java 编写的,我们无法解码 Apple 的公钥。当您点击 URL https://appleid.apple.com/auth/keys时,它会为您提供公钥。但是当我尝试创建一个PublicKeyJava 对象时,它无法识别其中的n和值。e这些是 Base64 编码的吗?

当我尝试解码Base64 中的n和值时,它给了我. 我怀疑它是base64的原因是在NodeJS包(https://www.npmjs.com/package/node-rsa)中,他们正在通过base64解码n和e值。但问题是指数值(e)永远不可能是base64。我如何从中创建一个 PublicKey 对象?eillegal character 2dAQAB

我正在使用的代码是:

HttpResponse<String> responsePublicKeyApple =  Unirest.get("https://appleid.apple.com/auth/keys").asString();

ApplePublicKeyResponse applePublicKeyResponse = new Gson().fromJson(responsePublicKeyApple.getBody(),ApplePublicKeyResponse.class);

System.out.println("N: "+applePublicKeyResponse.getKeys().get(0).getN());
System.out.println("E: "+applePublicKeyResponse.getKeys().get(0).getE());

byte[] decodedBytesE = Base64.getDecoder().decode(applePublicKeyResponse.getKeys().get(0).getE());
String decodedE = new String(decodedBytesE);

System.out.println("decode E: "+decodedE);

byte[] decodedBytesN = Base64.getDecoder().decode(applePublicKeyResponse.getKeys().get(0).getN());
String decodedN = new String(decodedBytesN);

System.out.println("decode N: "+decodedN);

BigInteger bigIntegerN = new BigInteger(decodedN,16);
BigInteger bigIntegerE …
Run Code Online (Sandbox Code Playgroud)

java spring ios sign-in-with-apple

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

Micronaut 控制器测试 - 使用交换而不是检索时 DefaultHttpClient (RxHttpClient) 返回 null 正文

这是使用 Micronaut 生成的示例应用程序2.3.1。我有一个简单的控制器和一个 POJO:

@Controller
public class MyController {
    @Get("/hello")
    public HttpResponse<Response> getResponse() {
        return HttpResponse.ok(new Response("Hello"));
    }
}

public class Response {
    private String value;

    private Response() {
    }

    public Response(String value) {
        this.value = value;
    }

    public String getValue() {
        return value;
    }
}
Run Code Online (Sandbox Code Playgroud)

和一个测试套件Spock。问题是,当使用RxHttpClient::exchange方法时 - 返回的主体始终是null. 但是,当使用 RxHttpClient::retrive主体时会正确返回:

@MicronautTest
class MyControllerTest extends Specification {

    @Inject
    @Client("/")
    RxHttpClient rxHttpClient;

    def "test exchange"() {
        given:

        when:
        HttpResponse<Response> response = rxHttpClient.toBlocking() …
Run Code Online (Sandbox Code Playgroud)

java micronaut

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

如何将命令行参数传递给 Junit Test

我有一个接受命令行参数的主类,并且我将此参数传递给另一个类。现在我必须使用参数测试 myClass。我有 JUnit 来测试它,但我想知道如何在测试中通过它

public class JsonFileTest {
    public static void main(String[] fileNames) {
        myClass class = new myClass(fileNames);
    }
}
Run Code Online (Sandbox Code Playgroud)

我是 JUnit 的初学者,正在学习它,因此如果有任何指导,我将不胜感激。我需要将文件名传递给类方法。

java junit command-line-arguments

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

RxJava3。为什么 FlowableSubscriber onNext 没有被调用?

我需要获取订阅对象才能有机会取消订阅侦听器。为此,我想提供一个 FlowableSubscriber 来运行。

代码:

FlowableSubscriber fs = new FlowableSubscriber() {
        @Override
        public void onSubscribe(@NonNull Subscription s) {
            System.out.println("Flowable onSubs");
        }

        @Override
        public void onNext(Object o) {
            System.out.println("Flowable onNext");
        }

        @Override
        public void onError(Throwable t) {
            System.out.println("Flowable onErr");
        }

        @Override
        public void onComplete() {
            System.out.println("Flowable onComlet");
        }
    };
Run Code Online (Sandbox Code Playgroud)

日志是:

Running...
Flowable onSubs
Run Code Online (Sandbox Code Playgroud)

如果我使用 lambda,它可以工作,但没有 onSubscribe 回调。

我怎样才能获得订阅以及为什么这些方法没有被调用?

java rx-java

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

如何使用流将二维int数组转换为单个字符串?

我正在尝试将二维int数组转换为单个int,其中每个数字和每个使用流的单个数组之后的换行符之间都有一个空格。

我已经使用mapToObj轻松地对一维数组完成了此操作,但是当流是由数组而不是int组成时,这不是很容易。

int[] a = {1, 2, 3, 4};

String[] strArray = Arrays.stream(a).mapToObj(String::valueOf).toArray(String[]::new);

String joined = String.join(" ", strArray);
Run Code Online (Sandbox Code Playgroud)

a会映射到1 2 3 4这里。我想要的是像

int[][] a = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};

映射到

1 2 3
4 5 6 
7 8 9
Run Code Online (Sandbox Code Playgroud)

如何获得与相似的东西joined,但具有二维数组并且仍在使用流?

java string java-stream

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

无法使用 java 1.8 更新 docker 容器

在 docker 容器中运行的 java 应用程序之一需要 java 1.8 但容器具有 java 1.7 。现在它失败并出现错误“不支持的major.minor版本52.0”

\n\n

dockerfile内容是

\n\n
FROM\xc2\xa0tomcat:8.0 \n\xc2\xa0   \xc2\xa0   \nCOPY\xc2\xa0webapps/abc /usr/local/tomcat/webapps/abc\nCOPY\xc2\xa0webapps/*.war /usr/local/tomcat/webapps/   \n\xc2\xa0   \xc2\xa0   \n#COPY\xc2\xa0...........   \n\xc2\xa0   \xc2\xa0   \nCOPY\xc2\xa0tomcat-users.xml /usr/local/tomcat/conf/   \nCOPY\xc2\xa0server.xml /usr/local/tomcat/conf/  \n
Run Code Online (Sandbox Code Playgroud)\n\n

我尝试使用另一个基本映像“FROM tomcat:8.5.51-jdk8-openjdk”\n但 xdx 解析器出现错误。

\n\n

我如何在该容器上安装/升级到 java 版本 1.8。\n我是 DOTNET-Windows 人员。我们公司收购的实验室之一就有这个应用程序。原来的开发团队现在不可用。\n非常感谢这方面的任何帮助。

\n

java tomcat java-8 docker tomcat8

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