小编Mic*_*ter的帖子

使用Java流的列表中列表的平均特定值

无法弄清楚如何读取特定建筑物列表中动物的平均体重。

我编写了另一种获取每种动物的动物名称的方法,所以我知道我的持久性正在起作用。

动物园:

public class Zoo {
    private List<Animal> animals;
    private List<Building> buildings;

    public Zoo() {
        this.animals = new PersistencyController().giveAnimals();
        this.gebouwen = new PersistencyController().giveBuildings();
    }

 public List<Animal> giveAnimalsByKind(String kindName) {
        return animals.stream().filter(animal -> animal.getKind().getName() == kindName).sorted(Comparator.comparing(Animal::getWeight)).collect(Collectors.toList());
    }

    public double giveAvgWeightForAnimalsInBuilding(String buildingName) {
        return animals.stream().collect(Collectors.averagingDouble(Animal::getWeight));
    }
}
Run Code Online (Sandbox Code Playgroud)

动物:

public class Animal implements Serializable {

    private int nr;
    private String name;
    private double weight;
    private Kind kind;

    public Animal(int nr, String name, double weight, Kind kind) {
        this.nr = nr;
        this.name = …
Run Code Online (Sandbox Code Playgroud)

java lambda java-8 java-stream collectors

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

不同参数Java的抽象方法

public abstract class CommonClass {

      abstract void send(<what should i put here???>) {}
    }   

 public class ClassA extends CommonClass {

      void send(List<Comments> commentsList) {
            // do stuff
      }
    }

 public class ClassB extends CommonClass {

      void send(List<Post> postList) {
            // do stuff
      }
    }
Run Code Online (Sandbox Code Playgroud)

我是OODP的新手,我正在尝试一种能够接收任何种类的List数据的方法,以便我可以抽象出一些东西。我怎样才能做到这一点?

java generics

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

如果为用户存储 SPI 选择“NO_CACHE”缓存策略,KeyCloak 7.0.0 会抛出 NullPointerException

我创建了一个用户存储SPI,用于对外部数据库中的用户进行身份验证,我可以在KeyCloak的“用户”页面中列出所有用户,并且用户可以从keycloak登录页面http://127.0.0.1:8080/登录auth/realms/dev/account/。但是如果我想从 http://127.0.0.1:8080/auth/realms/dev/protocol/openid-connect/token获取访问令牌,KeyCloak 会抛出异常,如下所示。如果我将缓存策略设置为“默认”,KeyCloak 可以正常工作。

09:18:04,972 ERROR [org.keycloak.services.error.KeycloakErrorHandler] (default task-3) Uncaught server error: java.lang.NullPointerException
        at org.keycloak.models.utils.KeycloakModelUtils.resolveAttribute(KeycloakModelUtils.java:415)
        at org.keycloak.protocol.oidc.mappers.UserAttributeMapper.setClaim(UserAttributeMapper.java:101)
        at org.keycloak.protocol.oidc.mappers.AbstractOIDCProtocolMapper.setClaim(AbstractOIDCProtocolMapper.java:119)
        at org.keycloak.protocol.oidc.mappers.AbstractOIDCProtocolMapper.transformAccessToken(AbstractOIDCProtocolMapper.java:81)
        at org.keycloak.protocol.oidc.TokenManager.transformAccessToken(TokenManager.java:553)
        at org.keycloak.protocol.oidc.TokenManager.createClientAccessToken(TokenManager.java:411)
        at org.keycloak.protocol.oidc.TokenManager$AccessTokenResponseBuilder.generateAccessToken(TokenManager.java:712)
        at org.keycloak.protocol.oidc.endpoints.TokenEndpoint.resourceOwnerPasswordCredentialsGrant(TokenEndpoint.java:609)
        at org.keycloak.protocol.oidc.endpoints.TokenEndpoint.processGrantRequest(TokenEndpoint.java:190)
Run Code Online (Sandbox Code Playgroud)

java keycloak

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

存储库类委派给实现BaseDao的多个Dao-可能吗?

我的Android应用程序有一个Room数据库。我的FooDao和BarDao都实现了BaseDao:

interface BaseDao<T> {
    @Insert
    fun insert(obj: T): Long
    @Update
    fun update(obj: T)
}

@Dao
interface FooDao: BaseDao<FooEntity> {
    @Query("some query")
    fun doSomethingWithFoo()
}

@Dao
interface BarDao: BaseDao<BaseEntity> {
    @Query("some other query")
    fun doSomethingWithBar()
}
Run Code Online (Sandbox Code Playgroud)

我也有一个存储库类:

class MyRepo(private val fooDao: FooDao, private val barDao: BarDao) {
    fun doSomethingWithFoo() = fooDao.doSomethingWithFoo()
    fun doSomethingWithBar() = barDao.doSomethingWithBar()
}
Run Code Online (Sandbox Code Playgroud)

但是,可以想象FooDao,BarDao和MyRepo不仅具有这两个功能。

我已经了解了有关类委托以启用组合继承的知识。因此,我试图通过让MyRepo委托简单的函数来减少MyRepo的样板,这些简单函数仅调用dao的函数并返回dao的返回值。我应该这样做:

class MyRepo(...): FooDao by fooDao, BarDao by barDao {
    //fun doSomethingWithFoo no longer necessary
    //fun doSomethingWithBar no longer necessary
}
Run Code Online (Sandbox Code Playgroud)

但是,Android Studio却让我措手不及 Type …

generics kotlin android-room

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

如何解决“参数不同!” Junit 和 Mockito 中的 Wanted' 错误

在执行涉及包含 verify.save() 方法的JUnit测试用例时,我收到以下错误“参数不同!” 通缉'

@Test
public void checkCorrectAttemptTest() {
    Multiplication multiplication = new Multiplication(50, 60);
    User user = new User("abc");
    MultiplicationResultAttempt attempt = new MultiplicationResultAttempt(user, multiplication, 3000, false);
    MultiplicationResultAttempt verifiedAttempt = new MultiplicationResultAttempt(user, multiplication, 3000, true);
    when(userRepository.findByAlias("abc")).thenReturn(Optional.empty());
    boolean attemptResult = multiplicaitonServiceImpl.checkAttempt(attempt);
    assertThat(attemptResult).isTrue();

    verify(attemptRepository).save(verifiedAttempt);
}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误消息。

Argument(s) are different! Wanted:
attemptRepository.save(
    MultiplicationResultAttempt [user=User [alias=abc], multiplication=Multiplication [factorA=50, factorB=60], resultAttempt=3000, correct=true]
);
-> at microservices.book.multiplication.service.MultiplicationServiceImplTest.checkCorrectAttemptTest(MultiplicationServiceImplTest.java:60)
Actual invocation has different arguments:
attemptRepository.save(
    MultiplicationResultAttempt [user=User [alias=abc], multiplication=Multiplication [factorA=50, factorB=60], resultAttempt=3000, correct=true]
);
-> …
Run Code Online (Sandbox Code Playgroud)

java rest junit mockito spring-boot

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

如何使这个复杂的if-else语句在Kotlin中可维护

我编写了一个函数,用于根据requestparams从数据库中获取信息。以下if-else语句是一个巨大的问题。如果我们继续添加更多过滤器,则需要继续为所有可能的路径添加语句。

    fun getMessages(name: String, pageable: Pageable, locale: String?, subject: String?,
                              recipient: String?): Page<MessageDTO>? {

        val messagePageable= if (!locale.isNullOrEmpty() && !subject.isNullOrEmpty() && !recipient.isNullOrEmpty()) {
            messageRepository.findAll(where(hasMessageName(name).and(hasLocale(locale!!)
            .and(hasSubject(subject!!).and(hasRecipient(recipient!!))))), pageable)
        } else if (!locale.isNullOrEmpty()) {
            messageRepository.findAll(where(hasMessageName(name).and(hasLocale(locale!!))), pageable)
        } else if (!subject.isNullOrEmpty()) {
            messageRepository.findAll(where(hasMessageName(name).and(hasSubject(subject!!))), pageable)
        } else {
            messageRepository.findAll(where(hasMessageName(name)), pageable)
        }
        return messagePageable.map { messageMapper.toMessageDTO(it) }.takeIf { it.content.isNotEmpty() }
}
Run Code Online (Sandbox Code Playgroud)

应该有一个更好的书面方式。我感谢您的帮助。

java if-statement simplify kotlin

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

与 Mockito Mock 进行宽松的字符串匹配

我有一个测试来验证空对象的返回(如果该对象的字符串属性与预先确定的值不匹配)。我的代码是

import guru.springframework.sfgpetclinic.model.Speciality;
import guru.springframework.sfgpetclinic.repositories.SpecialtyRepository;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.junit.jupiter.MockitoExtension;

import java.util.Optional;

import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.mockito.BDDMockito.*;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.BDDMockito.given;
import static org.mockito.BDDMockito.then;

@ExtendWith(MockitoExtension.class)
class SpecialtySDJpaServiceTest {

    @Mock
    SpecialtyRepository specialtyRepository;

    @InjectMocks
    SpecialtySDJpaService service;


    @Test
    void testSaveLambdaNoMatch() {

       // Given
       final String MATCH_ME = "MATCH_ME";
       Speciality speciality = new Speciality();
       speciality.setDescription("Not a match");

       Speciality savedSpeciality = new Speciality();
       savedSpeciality.setId(1L);

       // Need mock to only return on match …
Run Code Online (Sandbox Code Playgroud)

java mockito junit5

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

是否可以在kotlin中嵌套数据类?

我正在尝试实现类似以下C的类似数据类定义:

struct A {
  int b;
  struct {
     int d;
  } c; 
};
Run Code Online (Sandbox Code Playgroud)

According to Dmitry Jemerov it is possible, but he didn't provide any code sample. https://discuss.kotlinlang.org/t/is-there-a-reason-for-not-allowing-inner-data-classes/2526/5

You can simply make it nested inside another class. Nested classes can be data classes.

How it should be done if it is true?

kotlin data-class

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

我可以将带null检查的when更改为其他方法吗?

在Kotlin中,还有其他的“ Kotlin”方法可以执行以下操作吗?

fun parse(inputSample: Sample): List<String> = 
   when {
     inputSample.foo != null -> parse(inputSample.foo)
     inputSample.bar != null -> parse(inputSample.bar)
     else -> emptyList()
  }
Run Code Online (Sandbox Code Playgroud)

我怀疑nullwith的支票when可以用Kotlin写成不同的形式

kotlin kotlin-null-safety

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

使用子字符串从Java中的字符串中获取整数和字符?

要求用户输入温度,然后用户输入数字,后跟摄氏温度或华氏温度的C或F。然后程序将识别温度以及测量温度的单位-使用此数据可以告诉您“水”是固态,液态还是气态。

我尝试了以下

public static void main(String[] args) {
    Scanner myScan = new Scanner(System.in);

    System.out.print("Enter THE temp: ");
    String ent = myScan.next();


    int temp = Integer.parseInt(ent.substring(0,4));

    //char type = ent.charAt();
    //System.out.println(temp);
    // System.out.println(type);

    if (temp >= 100) {
        System.out.println("The water is gaseous");
    } else if (temp < 0) {
        System.out.println("The water is solid");
    } else {
        System.out.println("the water is liquid");
    }

}
Run Code Online (Sandbox Code Playgroud)

当我将(0,4)放入temp子字符串中时,我会认为输出将是输入的前3个数字。相反,当我输入1 int或3时,我得到一个错误“ java.lang.StringIndexOutOfBoundsException”。

java substring

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