Тип JAVA Pass Primitive как ссылка на вызов функции - PullRequest
0 голосов
/ 07 сентября 2018

Я новичок в Java. Мне нужно передать значение примитивного типа в качестве ссылки в вызове функции. Я не хочу возвращать значение из функции, потому что она уже возвращает некоторый объект.

for (int i = 0; i < objects.size();) {
  // here it should fetch that object based on i manipulated in function
  Object obj = objects.get(i)
  Object node = someFunction(session,obj,i);
  // push node in nodes array
}
public Object someFunction(Session session,Object obj,int i){
   //manipulate i value based on condition
   if(true){
      i = i + 1;
   }else{
      i = i + 2;
   }
}

Как я могу добиться этого, поскольку JAVA использует передачу по значению при вызове функции?

Спасибо

Ответы [ 3 ]

0 голосов
/ 07 сентября 2018

Вы можете использовать единый массив типа int[] для быстрого решения и увеличения его внутреннего значения. Это не меняет сам массив, только его содержимое.

0 голосов
/ 07 сентября 2018

Вам известны потоки Java? С потоками вы можете сделать что-то вроде:

List<Object> result = objects.stream()
     .filter(object -> {/*add condition here*/})
     .map(object->{/*do something with object that match condition above*/})
     .collect(Collectors.toList()); 

Вы можете использовать этот механизм для сбора и обработки объектов на основе определенных условий.

Если это не поможет, может быть, использовать итератор?

Iterator<Object> it = objects.iterator();
while(it.hasNext()){
    Object node = someFunction(session,it);
}

public Object someFunction(Session session,Iterator i){
   //manipulate i value based on condition
   if(true){
      i.next();
   }else{
      i.next();
      i.next();
   }
}
0 голосов
/ 07 сентября 2018

В Java примитивные типы всегда передаются по значению. Чтобы перейти по ссылке, вы должны определить класс и поместить в него свой примитивный тип. Если вы передадите класс Integer, он не будет работать, потому что этот класс неизменен и значение не меняется.

...